부모 클래스를 상속 받은 자식 클래스의 인스턴스가 부모의 객체로도 사용됨.

또한 자식 클래스의 객체로도 사용할 수 있음.

이게 뭔 개 소리냐고?

class Person {
    String name;
    int age;
    int weight;

    Person(){}
    Person(String name, int age, int weight) {
        this.name = name;
        this.age = age;
        this.weight = weight;
    }
    void wash(){System.out.println("씻다");}
    void study(){System.out.println("공부하다");}
    void play(){System.out.println("놀다");}
    void who(){System.out.printf("%s는 %d살이며 %d kg이다. \\n", name, age, weight);}
}

우선 상위(부모) 클래스를 위와 같이 정의하자

인터페이스 몇 개 쓰고 하위 클래스를 아래와 같이 해보자

class Student extends Person implements Allowance, Train{

    Student(String name, int age, int weight){
        super(name, age, weight);
    }

    public void in(int price, String name){
        System.out.println(price + "원 을" + name + "에게 받았습니다.");
    }
    public void out(int price, String name){
        System.out.println(price + "원 을을" + name + "에 썼습니다.");
    }
    public void train(int price, String name){
        System.out.printf("%s(을)를 %d원에 공부했다.", name, price);
    }
}

메서드는 다 인터페이스에서 넘어온 거다. 상위클래스인 Person에는 없음.

extends를 Person에서 받는 Student 클래스다.

객체 생성시

Student s1 = new Student("백", 17, 80);