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
자바의 모든 클래스들은 Object 클래스를 직간접적으로 상속한다.
java.lang.Object