Java의 정석 기초편(남궁성) 정리 + a/6 ~ 7. 객체지향 프로그래밍 1, 2

객체지향 프로그래밍2 01 ~ 02 + 06 ~ 11 . 상속 , Object클래스(모든클래스의 조상) , 오버라이딩 ( vs 오버로딩 ) , 참조변수 super , 생성자 super()

doriver 2022. 7. 29. 21:55

상속 ( Inheritance )

public class Content01 {
		
	public static void main(String[] args) {
		
		SmartTv stv = new SmartTv();
		stv.channel = 10; // 조상 클래스로부터 상속받은 멤버
		stv.channelUp(); // 조상 클래스로부터 상속받은 멤버
		System.out.println(stv.channel);
		
		stv.displayCaption("Hello, world");
		stv.caption = true;
		stv.displayCaption("Hello, hello");
		
	}

}


class Tv {
	boolean power;
	int channel;
	
	void power() { power = !power; }
	void channelUp() { ++channel; }
	void channelDown() { --channel; }
}

class SmartTv extends Tv {
	boolean caption;

	void displayCaption(String text) {
		if (caption) {
			System.out.println(text);
		}
	}
}

자손클래스는 조상클래스의 모든 멤버를 상속받는다

(단, 생성자와 초기화 블럭은 상속되지 않는다)

 

그래서 상속을 받는다는것은 조상클래스를 확장(extend)한다는 의미로 해석할수도 있다

자손클래스의 인스턴스를 생성하면 조상 클래스의 멤버도 함께 생성되기 때문에 따로 조상 클래스의 인스턴스를 생성하지 않고도 조상클래스의 멤버들을 사용할수 있다.

 

Object클래스

모든 클래스 상속계층도의 최상위에 있는 조상클래스이다

class Tv { ~ } 를 컴파일하면 class Tv extends Object { ~ } 와같이 컴파일러가 자동으로 'extends Object'를 추가하여 Tv클래스가 Object클래스로부터 상속받도록 한다

 

자바의 모든 클래스들은 Object클래스의 멤버들을 상속받기 때문에 Object클래스에 정의된 멤버들을 사용할수 있다

주요 메서드로는 toString()과 equals(Object o)등이 있다

 

오버라이딩 ( Overriding )

조상클래스로부터 상속받은 메서드의 내용을 변경하는 것 ( 자손클래스 자신에 맞게 변경 )

메서드의 선언부(메서드 이름, 반환타입, 매개변수)는 조상의 것과 완전히 일치해야 한다.

조상의 메서드를 오버라이딩 한다

오버로딩 ( Overloading )

한 클래스 내같은 이름의 메서드를 여러개 정의하는 것

매개변수의 개수 또는 타입이 달라야하고 , 반환 타입은 관계 없다

 

 

 

super

자손클래스에서 조상 클래스로부터 상속받은 멤버를 참조하는데 사요되는 참조변수이다.

멤버변수와 지역변수의 이름이 같을때 this를 붙여서 구별했듯이 , 상속받은 멤버와 자신의 멤버와 이름이 같을떄 super를 붙여서 구별할수 있다.

 

모든 인스턴스 메서드에는 this와 super가 지역변수로 존재, 이 들에는 자신이 속한 인스턴스의 주소가 자동으로 저장된다. 조상의 멤버와 자신의 멤버를 구별하는데 사용된다는 점만 제외하면 this와 super는 근본적으로 같다.

 

super()

super()는 생성자 이다

this()는 같은 클래스의 다른 생성자를 호출하는데 사용되지만, super()는 조상의 생성자를 호출하는데 사용된다

 

클래스 자신에 선언된 변수는 자신의 생성자가 초기화를 하도록 작성하는 것이 좋다.

생성자는 상속되지 않는다