16-1. 상속이 도움이 되는 상황의 소개

aaa.PNG

  1. A a = new B 자식클래스의 인스턴스를 생성해서 부모클래스의 참조변수로 참조가능
  2. 오버라이딩 A에 fct()메소드가 있을때, 자식 클래스인 B에도 fct() 메소드가 정의 되어 있다면 자식클래스가 부모클래스의 fct메소드를 오버라이딩 한다.

a라는 참조변수를 가지고 어떤 메소드나 멤버변수, 인스턴스변수에 접근할 때 a가 참조하는 인스터는스는 b클래스의 인스턴스이지만 a영역에만 접근이 가능한데, a클래스의 fct메소드가 오버라이딩이 된 경우, a라는 참조변수를 통해 fct메소드를 호출하면 b클래스에있는 오버라이딩이 되어있는 fct메소드가 호출된다.

인맥관리프로그램

공통되는 부분 Friend로 묶고 별도로 존재하여야 하는 정보들은 Friend를 상속하는 CompFriend, UnivFriend에서 가지고 있도록 클래스 디자인

부모: Friend 클래스

package org.example;

class Friend{
    protected String name;
    protected String phone;

    public Friend(String na, String ph){
        name=na;
        phone=ph;
    }
    public void showInfo(){
        System.out.println("이름: "+name);
        System.out.println("전화: "+phone);
    }
}
package org.example;

public class CompFriend extends Friend{
    private String department;

    public CompFriend(String na, String de, String ph){
        super(na, ph);
        department = de;
    }
    public void showInfo(){
        super.showInfo();
        System.out.println("부서: "+department);
    }
}
package org.example;

public class UnivFriend extends Friend{
    private String major;

    public UnivFriend(String na, String ma, String ph){
        super(na, ph);
        major = ma;
    }
    public void showInfo(){
        super.showInfo();
        System.out.println("전공: "+major);
    }
}

public static void main(String[] args) {
       Friend[] frns = new Friend[10];
       int cnt = 0;

       frns[cnt++] = new UnivFriend("LEE","Computer","010-555-333");
       frns[cnt++] = new UnivFriend("KIM","Electronics","010-555-333");
       frns[cnt++] = new CompFriend("YOON","R&D 1","053-555-333");
       frns[cnt++] = new CompFriend("PARK","R&D 2","02-555-333");

        for (int i = 0; i < cnt; i++) {
            frns[i].showInfo();
            System.out.println();
        }
    }
출력

이름: LEE
전화: 010-555-333
전공: Computer

이름: YOON
전화: 053-555-333
부서: R&D 1

이름: KIM
전화: 010-555-333
전공: Electronics

이름: PARK
전화: 02-555-333
부서: R&D 2

16-2 Object 클래스와 final 선언 그리고 @Override

자바의 모든 클래스들은 Object 클래스를 직간접적으로 상속한다.

java.lang.Object