
public class Test {
public static void main(String[] args) {
// 다형성
// 1. 상속 관계에 있을 때, 조상 클래스 타입으로 자손 클래스 객체 참조 가능
Student st = new Student();
Person p = new Student();
Object obj = new Student();
}
}
package test03_binding_test;
class Parent {
String x = "parent x";
public void method() {
System.out.println("parent method.");
}
public static void static_method() {
System.out.println("parent static method.");
}
}
class Child extends Parent{
String x = "child x";
@Override
public void method() {
System.out.println("child method.");
}
public static void static_method() {
System.out.println("child static method.");
}
}
public class BindingTest {
public static void main(String[] args) {
Parent p = new Child();
Child c = new Child();
System.out.println(p.x);
p.method();
p.static_method();
System.out.println(c.x);
c.method();
c.static_method();
}
}
Console
parent x
child method.
parent static method.
child x
child method.
child static method.
Student st = new Student(); Person p = st; Person p = new Student();
Student st = (Student) p;
//Student st = (Student) new Person(); → ClassCastException
Person[] persons = new Person[3];
persons[0] = new Person("park", 27);
persons[1] = new Student("Kim", 22, "Java");
persons[2] = new Student("Lee", 22, "Java");
for(Person person : persons) {
System.out.println(person);
person.eat();
// 만약 Student 객체만 출력하고 싶은 경우,
if (person instanceof Student) {
System.out.println(person);
}
}
; 으로 종료되어야 한다. package test06;
abstract class Animal {
private String name;
private int age;
public Animal(String name, int age) {
this.name = name;
this.age = age;
}
// public void speak() {
// System.out.println("동물이 소리를 냅니다");
// }
public abstract void speak();
Animal 의 타입으로 참조하였을 때, 해당 메서드가 목록에서 보이지만,
실행될 때는 자식 클래스에서 오버라이드한 메서드가 실행.
Animal[] animals = new Animal[3]; 과 같이 생성하게 되는 경우, 객체 생성이 아닌 배열 생성이므로 가능하다.
추상 메서드가 없어도, class 에 abstract 선언 가능하다.

추상 클래스의 자식 클래스는
1. 모든 추상 메서드를 오버라이드
2. 오버라이드 하지 않으면, 추상 메서드로 남아야 한다.
추상 클래스는 구현의 강제를 통해 프로그램의 안정성을 향상한다.
1. 객체를 생성하지 말 것이라는 의미
2. 상속과 오버라이딩 사용 후 객체 생성하여 사용하라는 의미를 보이기도 한다.
3. 객체 생성은 일반 class를 통해, 다형성을 유지하라는 의미.
