컴퓨터는 잘못이 없다..

[JAVA]최상위 클래스인 Object클래스 (상속은 extends, 상속관계에서 생성자호출, 다중상속은 불가능하다) 본문

공부/JAVA

[JAVA]최상위 클래스인 Object클래스 (상속은 extends, 상속관계에서 생성자호출, 다중상속은 불가능하다)

도토리까꿍v 2020. 11. 29. 02:09
Contents 접기

 

[예제코드]

 

Phone.java

package test.mypac;
//extends는 어떤 클래스를 상속 받을 때 사용하는 예약어이다.
//어떤 클래스도 extends 하지 않으면 자동으로 Object 클래스를 상속받게 된다.
//따라서 Ojbect 클래스를 상속받을 거라면 생략이 가능하다.
public class Phone{
	
	//디폴트 생성자
	public Phone() {
		System.out.println("Phone 생성자 호출됨");
	}
	
	//전화거는 non-static 메소드
	public void call() {
		System.out.println("전화를 걸어요!");
	}
	

}

 

HandPhone.java

package test.mypac;

public class HandPhone extends Phone{
	
	//디폴트 생성자
	public HandPhone() {
		System.out.println("HandPhone() 생성자 호출됨");
	}

	//이동중에 전화를 걸어요
	public void mobileCall() {
		System.out.println("이동중에 전화를 걸어요");
	}
	
	//사진을 찍어요
	public void takePicture() {
		System.out.println("30만 화소의 사진을 찍어요!");
	}
}

 

 

MainClass01.java

package test.main;

import test.mypac.HandPhone;
import test.mypac.Phone;

public class MainClass01 {
	//run했을 때 application의 시작점 도입점이 되는 main 메소드
	public static void main(String[] args) {
		//run 하면  Phone객체가 만들어지고 참조값이 p1에 저장된다. 
		Phone p1 = new Phone(); 
		//run 하면 HandPhone 객체가 만들어지고 참조값이 p2에 저장된다.
		HandPhone p2 = new HandPhone(); 
		
		//부모클래스(Phone) 에 정의된 메소드 호출가능
		p2.call();
		
		//자식클래스(HandPhone)에 추가된 메소드는 당연히 호출가능
		p2.mobileCall();
		p2.takePicture();
		
	}
}

 

MainClass01실행결과

Phone 생성자 호출됨
Phone 생성자 호출됨
HandPhone() 생성자 호출됨
전화를 걸어요!
이동중에 전화를 걸어요
30만 화소의 사진을 찍어요!

 

[코드설명]

1.최상위 클래스 Object

MainClass01.java에서 Phone p = new Phone() 하고 p.~을 쳐보면

내가 만들지도 않은 메소드들이 있다. 어디서 온 메소드들일까?

└모든 클래스는 어떤 class도 extends 하지 않으면 java.lang 패키지에 있는 Object클래스를 상속받게 된다. 

(java.lang 패키지는 import하지 않아도 자동으로 import 되어있다.)

 

 

2. Object 클래스 문서 보기

 

3. Phone, HandPhone 상속관계

HandPhone은 Phone을 상속받고 있다.

따라서 Phone의 필드와, 메소드를 상속받았기 때문에 사용가능하다.

 

 

4. Object, Phone, HandPhone 상속관계 

Phone 클래스는 누구도 상속받고 있지 않으니 Object클래스가 상속된다.

HandPhone클래스는 Phone클래스를 상속받고 있으니 Phone클래스와 Object클래스를 상속받는다. 

5. 생성자 호출 

 

6.상속은 1개만 가능하다! 다중상속은 불가!

public class SuperCar extends Car{} 은 가능하지만

public class SuperCar extends Car, Car2, Car3{} 와 같은 형태는 불가능! 

Comments