Develop/JAVA

JAVA 상속 특징

roalwh 2023. 10. 17. 20:49

 

//상속 특징
//매서드 오버라이드 - 부모(상위)클래스의 기능을 자식(하위) 클래스에서 재정의해서 사용한다.
//기본 자료형 처럼 클래스도 자료형 이다.
//모든 클래스의 최상위 클래스는 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