
package ex05.ch02;
class Animal {
int i = 1;
String name = "동물";
}
class Cat extends Animal {
String name = "고양이";
int age = 15;
}
class Dog extends Animal {
String name = "강아지";
}
public class ExVar01 {
public static void main(String[] args) {
Animal a1 = new Animal(); // [animal]
System.out.println(a1.i + ", " + a1.name);
Dog a2 = new Dog(); // [animal, dog]
System.out.println(a2.i + ", " + a2.name); // 부모의 것을 물려 받음(부수적인 효과)
Animal a3 = new Dog(); // [animal]
System.out.println(a3.i + ", " + a3.name);
Cat a4 = new Cat(); // [animal, cat]
System.out.println(a4.i + ", " + a4.name + ", " + a4.age);
Animal a5 = new Cat(); // [animal]
System.out.println(a5.i + ", " + a5.name + ", " + a5.age); // 오류
// Cat(자식)은 Animal(부모)에게 i를 물려 받지만
// Animal이 부모이기 때문에 Cat(자식)에게 물려 받지 못함
}
}
a1 은 animal 이라는 공간에 저장된 것만 꺼낼 수 있기 때문에 int i = 1 과 name = “동물”을 꺼낼 수 있다. 하지만 Animal 안에 상속되어 잇는 똑같이 본인의 Cat 공간에 있는 name = “고양이” 아 age = 15 를 꺼낼 수 있지만, Animal에게 상속 되어 있기 때문에 부모클래스에게로 부터 Cat 안에는 없는 int i = 1 이라는 변수도 쓸 수 있다.
Share article