16일차_2 상속

상속

extend > 내말을 덧붙일때~(확장) 3G extends 2G

Overriding > 기존에 있던 걸 무시하고 덮어쓰는 것(부모클래스에서 똑같은 이름을 재정의하는 것!)
super class(부모) > subclass(자식)
super() ? 부모클래스의 생성자

상속(inheritance)

기존에 사용중인 클래스의 필드를
다른 클래스에서 계속 사용을 해야 한다면
상속을 받는다.
그렇게 되면 부모 클래스의 필드를	
마치 자신의 것 처럼 사용할 수 있다.

다중 상속은 불가능 하다. 

상속 선언

class A{
A필드
}

class B extends A{
A, B필드
}

A : 부모 클래스, 상위 클래스, 슈퍼 클래스, 기반 클래스

B : 자식 클래스, 하위 클래스, 서브 클래스, 파생 클래스

부모 클래스로부터 상속받은 멤버 변수의 접근 권한이 private일 때
1. 부모 클래스의 생성자를 호출해서 초기화 시킬 수 있다.
2. 부모 클래스에 setter 메서드를 통해서 초기화 시킬 수 있다.
3. 변수에 저장된 값은 getter 메서드를 통해서 가져온다.

부모 클래스로부터 상속받은 멤버 변수의 접근 권한이 protected일 때
1. 자식 클래스에서 접근이 가능하기 때문에 this를 사용해서 초기화 한다.
2. 자식 클래스에서 접근이 가능하므로 getter 메서드를 사용하지 않고
변수명으로 값에 직접 접근하면 된다.

특징

자식 클래스의 생성자가 실행되기 전에 부모 클래스의 생성자가
먼저 실행된다.
실행할 부모 클래스의 생성자를 지정하지 않으면
부모 클래스의 기본 생성자가 자동으로 실행된다.
자동으로 입력되는 super()를 지우더라도 자바 컴파일러가
자동으로 넣어준다.

(실습예제)

1. Car 부모클래스 만들기

	public class Car {
	final int wheel = 4; //여기서만 수정가능함! final
	public String brand;
	protected String color;
	private int price;

	public Car() {
	System.out.println("부모 클래스의 기본 생성자");	// TODO Auto-generated constructor stub 
	}

	public Car(String brand, String color, int price) {
	this.brand = brand;
	this.color = color;
	this.price = price;
	}
	//ctrl+alt+S > O
    
	void engineStart() {
	System.out.println("열쇠로 시동 킴");
	}

	void engineStop() {
	System.out.println("열쇠로 시동 끔");
	
	}

	public int getPrice() {
	return price;
	}

	public void setPrice(int price) {
	this.price = price;
	}}
    

2. 자식클래스 만들어 확인

public class CarTest {
public static void main(String[] args) {
SuperCar superCar = new SuperCar();
//ctrl+T > 계층 관계도 확인 가능
	SuperCar ferrari = new SuperCar("ferrari","Red",45000,"sport");
	System.out.println(ferrari);
	System.out.println(ferrari.toString());
	ferrari.engineStart();
	ferrari.engineStop();
//기본생성자를 하면 부모클래스까지 호출되지만~~ 

} }

(결과창)

좋은 웹페이지 즐겨찾기