Backend/java

예제를 통한 상속의 이해

IT grow. 2018. 8. 8. 19:40
반응형
package day08;
public class Animal {
String kind = "동물의 종류"; // 동물의 종류가 나오기전에 임시적으로 null값으로 선언되어 있다.
public Animal() { // 기본 생성자의 형태 super 생략된 형태
System.out.println("Animal() call");
}
public Animal(String kind) { // Super 생략된 형태
this.kind = kind;
}
public void breath() // 메소드의 선언부
{
System.out.println("폐로 숨쉬기.");
}
public void Print()
{
System.out.println("*** Animal ("+kind+"정보) ***");
}
/*
* public static void main(String[] args)
* { //Animal a = new Animal(); // 여기서 a는
* 클래스인데 a의 시작주소가 클래스 Animal을 가르킬 것이다.
* System.out.println(); } }// 괄호가 닫히고 열렸는지
* 제대로 .. 컴파일 시 JVM은 이것을 확인한다.
*/
}
class Dog extends Animal {
String kind = "강아지 종류";
String name;
String name2;
public Dog() {
// super(); // 이 문장이 생략되어 있을 텐데 , 여기에는 부모 기본 생성자를 들렸다가 이 문장이 실행되는 것을 확인할 수 있다.
// System.out.println("Dog() call");
}
/*
* public String superkind() // 이 메서드는 super.kind를 리던해 주는 메서드 { return
* super.kind; }
*/
public Dog(String kind, String name) {
// super("강아지"); // First state에만 위치 할 수 있다.
this.kind = kind;
this.name = name;
}
public Dog(String kind, String name, String name2) {
// super("강아지"); // First state에만 위치 할 수 있다.
// super(name2) : 여기서 생각할 수 있는게 어차피 부모클래스를 한번 갔다 와야 하기 때문에 한번에 설정할 경우 이코드를 사용한다.
this.kind = kind;
this.name = name;
this.name2 = name2;
}
@Override
public void Print() {
super.Print();
System.out.printf("Dog[%s %s] %n", kind, name);
// 이때 kind는 상속받은 Animal의 kind를 의미하며 , 다른 kind 는 this 가 생략되어 있는 형태이다.
}
}


반응형