본문 바로가기

JAVA

상속(extends)

  상속

이미 설계된 클래스를 바탕으로 새로운 클래스를 만들수 있다.

기존에 있던 클래스를 확장하며 필드를 물려받는다. 이를 상속 받는다고 한다.

서브 클래스는 슈퍼 클래스의 필드 및 메서드를 가진다.

class 서브 클래스 이름 extends 슈퍼 클래스 이름{}

슈퍼클래스 : 기존의 클래스

서브클래스 : 기존의 클래스를 상속받은 클래스

 

슈퍼클래스를 상속받아(확장해) 선언한 클래스는 서브클래스이며, extends 키워드가 필요하다.

extends 키워드가 없는 경우는 Object 클래스를 상속받는다.

또한, 확장을 하더라도 접근지정자에 영향을 받는다.

 

 

 서브클래스 에서 슈퍼클래스 메소드를 호출할 수 있다.

 슈퍼클래스는 서브클래스에 접근 할 수 없다.

 

 내 위치에서 나 자신을 가르킬 때는 this 키워드를 썻다면,

부모(슈퍼클래스의 대상)을 가르킬 때는 super 키워드를 사용한다.

 

 - super.부모메서드 혹은 부모 필드

 - super() 부모 생성자 메서드

 

▶ 두개 이상의 슈퍼 클래스로부터 상속 받기.

extends 키워드는 하나만 사용 가능하다. 다중 상속은 인터페이스라는 메커니즘을 사용한다.

 


  클래스 다형성

클래스의 4가지 주요 기능은 다음과 같다.

1. 캡슐화

2. 상속

3. 다형성

4. 추상화

 

▶ 클래스 다형성

하나의 클래스를 상속받아 여러개의 클래스가 확장 됐을 경우에 상속의 주체가 되는 슈퍼클래스의 참조타입으로 업케스팅이 가능하며, 업케스팅된 객체로 비지니스 로직 처리가 가능하다.

 

 - 업케스팅

상속을 받아 객체화 된 대상을 슈퍼클래스 참조타입으로 케스팅 하는것.

자식 클래스가 부모 클래스의 타입으로 캐스팅(형변환)된다.

class Car{
	private String name;
	public void set(String name) {
		this.name = name;
		
	}
}
class Bus extends Car{

}

public class EX {
	public static void main(String[] args) {
		Car car = null;	
		Bus bus = new Bus();
		bus.set("버스");
		car = bus;	//업케스팅
	}
}

 - 다운케스팅

객체화된 부모클래스에서 상속을 받은 서브클래스로 케스팅 되는것.

부모 클래스가 자식 클래스의 타입으로 캐스팅(형변환) 된다.

class Car{
	private String name;
	public void set(String name) {
		this.name = name;
	}
}
class Bus extends Car{

}

public class EX {
	public static void main(String[] args) {
		Car car = null;
		car = new Bus();
		car.set("버스");
		Bus bus = (Bus) car; // 다운케스팅
	}

 

업케스팅, 다운캐스팅 되는 조건

상속된, 상속받은 객체여야 한다.

 


  Object 클래스 상속

아무것도 상속받지 않으면 Object 클래스를 상속받는다. 모든 클래스의 최상위 부모 클래스이다.

즉, 슈퍼클래스를 지정하지 않은 클래스는 Object클래스의 서브 클래스가 된다.

 

▶ Object 클래스에 접근

class Myclass{
	public String myName;
}

public class JavaBasic02 {

	public static void main(String[] args) {
		//Object myClass = new Myclass(); - 직접 접근하면 사용불가. 
		Myclass myClass = new Myclass();
		myClass.myName = "홍길동";
		
		Object myClassObject = myClass; //오브젝트 클래스로 업케스팅.
		Myclass myClass2= (Myclass) myClassObject;//Myclass 클래스로 다운 케스팅		

		//JavaBasic02 myClass3 = (JavaBasic02) myClassObject; - 에러.

		System.out.println(myClass2.myName); 
	}
}

 

'JAVA' 카테고리의 다른 글

추상 클래스  (0) 2020.04.27
메소드 오버라이딩  (0) 2020.04.27
클래스 라이브러리  (0) 2020.04.22
생성자  (0) 2020.04.22
메소드 오버로딩  (0) 2020.04.22