//상속 특징
//매서드 오버라이드 - 부모(상위)클래스의 기능을 자식(하위) 클래스에서 재정의해서 사용한다.
//기본 자료형 처럼 클래스도 자료형 이다.
//모든 클래스의 최상위 클래스는 Object 클래스이다.***
//상위 클래스를 호출할 때 super키워드를 이용한다.
//MainClass.java
public class MainClass {
public static void main(String[] args) {
//클래스의이름은 데이터 타입으로 인식이된다.
//childClass의 타입은 ChildClass
System.out.println("ChildClass makejjajang()출력");
ChildClass childClass = new ChildClass();
childClass.makejjajang();
System.out.println();
System.out.println("First, Second ChildClass 출력");
ParentClass fch = new FirstChildClass();
ParentClass sch = new SecondChildClass();
System.out.println();
System.out.println("매서드 오버라이드 출력");
// 매서드 오버라이드 출력 //재정의
ParentClass[] pArr = new ParentClass[2];
pArr[0] = fch;
pArr[1] = sch;
for(int i = 0; i<pArr.length;i++) {
pArr[i].makejjajang();
}
System.out.println();
System.out.println("super 클래스 출력");
//super 클래스 출력
childClass.getOpenYear();
}
}
//부모(상위)클래스
//ParentClass.java
public class ParentClass {
public ParentClass() {
System.out.println("ParentClass constructor");
}
public void makejjajang() { //기존의 기능
System.out.println(" --makejjajang() -- ");
}
//super 클래스
int openYear = 1995;
public void makeYear() {
System.out.println(" -- makeYear() START -- ");
}
}
//자식(하위)클래스
//ChdilClass.java
public class ChildClass extends ParentClass {
public ChildClass() {
System.out.println("ChildClass constructor");
}
@Override //기존의 상위 클레스의 기능을 재정의 //출력시 이녀석으로 표시가된다.
public void makejjajang() {
System.out.println(" -- more makejjajang() -- ");
}
//super 클래스
int openYear = 2000;
public void getOpenYear() {
System.out.println("Childclass's Open year : " + this.openYear); //현재 ChildClass의 openYear
System.out.println("Childclass's Open year : " + super.openYear); //ParentClass의 openYear
}
}
//자식(하위)클래스
//FirstChdilClass.java
// 매서드 오버라이드 출력 //재정의
public class FirstChildClass extends ParentClass{
public FirstChildClass() {
System.out.println("FirstchildClass constructor's makeJJ");
}
@Override
public void makejjajang() {
System. out .println ( " -- FirstChildClass's makeJJajang() START -- " );
}
}
//자식(하위)클래스
//SecondChdilClass.java
// 매서드 오버라이드 출력 //재정의
public class SecondChildClass extends ParentClass {
public SecondChildClass() {
System.out.println("SecondchildClass constructor's makeJJ");
}
@Override
public void makejjajang() {
System. out .println ( " -- SecondChildClass's makeJJajang() START -- " );
}
}
결과값
ChildClass makejjajang()출력
ParentClass constructor
ChildClass constructor
-- more makejjajang() --
First, Second ChildClass 출력
ParentClass constructor
FirstchildClass constructor's makeJJ
ParentClass constructor
SecondchildClass constructor's makeJJ
매서드 오버라이드 출력
-- FirstChildClass's makeJJajang() START --
-- SecondChildClass's makeJJajang() START --
super 클래스 출력
Childclass's Open year : 2000
Childclass's Open year : 1995
'Develop > JAVA' 카테고리의 다른 글
JAVA 인터페이스 (0) | 2023.10.17 |
---|---|
JAVA 내부(inner) 클래스와 익명(anonymous) 클래스 (0) | 2023.10.17 |
JAVA 상속 (0) | 2023.10.17 |
JAVA 기초 반복문(for,while,do~while) (0) | 2023.10.16 |
JAVA 조건문 if문, switch문 (0) | 2021.10.19 |