본문 바로가기

BackEnd/Java

[java] 이것이 자바다 ch07 상속2

728x90
반응형

1. 오버라이딩

   ▷ super ← 부모 클래스

   ▷ super() : 부모 클래스의 생성자를 실행합니다.

   ▷ super(인자1, 인자2)

   ▷ super.메소드() : 부모 클래스의 메소드를 실행합니다.

 

◎ 부모 메소드 호출

   ▷ 자식 메소드 내에서 super 키워드와 도트(.) 연산자를 사용하면 숨겨진 부모 메소드를 호출합니다.

   ▷ 부모 메소드를 재사용함으로써 자식 메소드의 중복 작업 내용을 없애는 효과가 있습니다.

 

◎ Airplane 부모 클래스
public class Airplane {
	
	public void land() {
		System.out.println("착륙합니다.");
	}
	
	public void fly() {
		System.out.println("일반 비행합니다.");
	}
	
	public void takeOff() {
		System.out.println("이륙합니다.");
	}
}​


SupersonicAirplane 자식 클래스

public class SupersonicAirplane extends Airplane {
	
	public static final int NORMAL = 1;
	public static final int SUPERSONIC = 2;
	
	public int flyMode = NORMAL;
	
	@Override
	public void fly() {
		if(flyMode == SUPERSONIC) {
			System.out.println("초음속 비행합니다.");
		} else {
			super.fly();
		}
	}
}


◎ SupersonicAirplaneExample 클래스(메인)

public class SupersonicAirplaneExample {
	public static void main(String[] args) {
		
		SupersonicAirplane sa = new SupersonicAirplane();
		
		sa.takeOff();
		sa.fly();
		sa.flyMode = SupersonicAirplane.SUPERSONIC;
		sa.fly();
		sa.flyMode = SupersonicAirplane.NORMAL;
		sa.fly();
		sa.land();
	}
}

 

 

2. final 클래스와 메소드

 

◎ final 클래스

   ▷ final 클래스는 부모 클래스가 될 수 없어 자식 클래스를 만들 수 없습니다.

 

◎ Member 부모 클래스
public final class Member {
}​

◎ VeryImportantPerson 자식 클래스
public class VeryImportantPerson extends Member {
}


final이 붙으면 상속을 할 수 없습니다.

 

◎ final 메소드

   ▷ 메소드를 선언할 때 final 키워드를 붙이면 오버라이딩 할 수 없습니다.

   ▷ 부모 클래스를 상속해서 자식 클래스를 선언할 때, 부모 클래스에 선언된 final 메소드는 자식 클래스에서 재정의 할 수 없습니다.

 

◎ Car 부모 클래스
public class Car {
	public int speed;
	
	public void speedUp() {
		speed += 1;
	}
	
	public final void stop() {
		System.out.println("차를 멈춤");
		speed = 0;
	}
}​


◎ SportsCar 자식 클래스 

public class SportsCar extends Car {
	
	@Override
	public void speedUp() {
		speed += 10;
	}
	
	@Override
	public void stop() {
		System.out.println("스포츠카를 멈춤");
		speed = 0;
	}
}​

 

 

3. protected 접근 제한자

   ▷ protected는 상속과 관련이 있고 public과 default 중간쯤에 해당하는 접근 제한

   ▷ protected는 같은 패키지에서는 default 처음 접근이 가능하나, 다른 패키지에서는 자식 클래스만 접근을 허용

 

 

NO 접근 제한자 제한 대상 제한 범위
1 protected 필드, 생성자, 메소드 같은 패키지이거나, 자식 객체만 사용 가능

   ▷ 다른 패키지의 자식 클래스는 접근할 수 있습니다.

 

1. package1
 (1) A 클래스
public class A {
	
	// 필드 생성
	protected String field;
	
	// 생성자 선언
	protected A() {
	}
	
	// 메소드 생성
	protected void method() {
	}
}​


 (2) B 클래스

public class B {
	
	public void method() {
		A a = new A();
		a.field = "value";
		a.method();
	}
}



2. package2
 (1) C 클래스

import package1.A;

public class C {
	public void method() {
		A a = new A();       // a에 protected : 다른 패키지라서 접근 불가능
		a.field = "value";
		a.method();
	}
}

 

 (2) D 클래스

import package1.A;

public class D extends A {

	public D() {
		super();
	}
	
	// 상속을 통해서 사용 가능합니다.
	public void method1() {
		this.field = "value";
		this.method();
	}
	
	// 직접 객체를 생성해서 사용하는 것은 안됩니다.
	public void method2() {
		A a = new A();
		a.field = "value";
		a.method();
	}
}​

 

class 사이의 상속에 대해서 배워보았습니다.

 

오버라이딩이나 final, protected 등은 class 사이의 연결을 제한하는 역할을 합니다.

 

많은 분들의 피드백은 언제나 환영합니다! 많은 댓글 부탁드려요~~

 

 

 

728x90
반응형

'BackEnd > Java' 카테고리의 다른 글

[java] 추상 클래스  (0) 2023.01.16
[java] 이것이 자바다 ch07 상속3  (0) 2023.01.13
[java] 이것이 자바다 ch07 상속  (2) 2023.01.12
[java] class  (1) 2023.01.12
[java] 이것이 자바다 ch06 singleton(싱글톤) 패턴  (1) 2023.01.12