상속1

2023. 9. 18. 09:41java

https://ap112.tistory.com/370

 

상속

예시) 1. 필드나 메소드가 이미 다른 클래스에 생성 되었다면 클래스를 생성해서 중복된 필드함수를 작성 하지않고 extend를 써서 쉽게 조합이 가능하다. 2.부모 클래스에서 필드 혹은 메소드에 pri

ap112.tistory.com

 

1.하위클래스는 상위클래스 계열이라 부를수 있지만

2.상위클래스는 하위클래스 계열이라 부를수 없다.

 

밑으로 내려갈수록 상속을 받기때문에 기능이 확장된다. <- extends

 

1.밑으로 내려갈수록 구체적이다.

2.위로 올라갈수록 추상적이다.

 

상속 : 자식(클래스)이 상속받고 싶은 부모(클래스)를 선택해서 물려받는다.

1.이때 상속받는 클래스를 자식 클래스, 하위 클래스 또는 서브 클래스라고 부른다. 

 

2.상속을 해주는 클래스를 부모 클래스, 상위 클래스 또는 슈퍼 클래스라고 한다.

 

상속은 더 나은것을 만들어 가는 과정

 

 

모든 클래스 최상위 클래스는 object

 

 

핸드폰 <- 상위 클래스

스마트폰, 피쳐폰 <- 하위 클래스

package step1;

public class Main {

	public static void main(String[] args) {
		
	  핸드폰 phone1 = new 핸드폰(); //핸드폰 타입의 객체
	  phone1.call();
	  phone1.send();
	  
	  피쳐폰 phone2 = new 피쳐폰();
	  phone2.call();
	  phone2.send();
	  phone2.sms();
	  
	  스마트폰 phone3 = new 스마트폰();
	  phone3.call();
	  phone3.send();
	  phone3.wifi(); //메소드 가져온다.
	  
	  // 스마트폰 타입의 객체가 핸드폰 타입으로 형변환 할 수 있다.
	  핸드폰 phone4 = new 스마트폰(); <- upcasting
	  핸드폰 phone5 = new 피쳐폰();
	  
	  //phone4.wifi(); <-- 핸드폰으로 형변환을 해놓아서 wifi 매서드를 사용 불가
	  
	  ((스마트폰)phone4).wifi(); <-- downcasting
	  
	  phone4.call();// 재정의된 값이 나타난다. <- 상속은 더 구체적인것을 만들어가는 과정이기 때문에 재정의된 하위 값이 나오게 된다.
	  phone5.call();// 재정의가 되지 않아서 핸드폰의 값이 나타난다.
	  
	//downcasting <-- upcasting된 상태에서 다시 원래 객체 타입으로 형변환 <-- 명시적 형변환
	  스마트폰 phone6 = (스마트폰)phone4; 
	}
}

하위클래스는 상위클래스의 모든 필드 <-- 소괄호가 없음

메소드 <-- 소괄호가 있음를 포함하고 있다. 

 

upcasting <-- 하위클래스 객체를 상위클래스 객체로 형변환 : 묵시적 형변환

1.핸드폰 phone4 = new 스마트폰();

 

2.핸드폰 phone5 = new 피쳐폰();

 

업캐스팅 되어 있는 상태에서 하위클래스 고유 메소드를 호출하려면

다운캐스팅으로 바꿔주면 사용가능

 

1. ((스마트폰)phone4).wifi();

 

2.스마트폰 phone6 = (스마트폰)phone4;

 

오버라이딩(재정의) <-- 상위클래스 객체를 하위클래스에서 재정의함(업그레이드 된검)

phone1에는 상위클래스인 핸드폰값만 나타나게 된다.

 

phone2에는  상위클래스인 핸드폰의 call과 send 및 하위클래스인 피쳐폰의 sms가 나타난다.

 

phone3에는 상위클래스인 send와 하위클래스인 wifi및 call은 상위였으나 하위에서 재정의인

오버라이딩을 해줘서 하위클래스 값이 나타난다.

 

phone4와 phone5는 upcasting인 하위클래스에서 상위클래스로 올라가는 것이고

 

업캐스팅 되어있을때 고유 메소드를 호출 하려면 다시 다운캐스팅인 상위클래스에서 하위클래스로 내려가면 된다.

 

 

'java' 카테고리의 다른 글

오버로딩과 오버라이딩의 차이  (0) 2023.09.19
db연결  (0) 2023.09.18
executeQuery  (0) 2023.09.15
jdbc insert2문  (0) 2023.09.15
JDBC  (0) 2023.09.15