-
자바 step8 - Extends(super, protected)Java 2022. 10. 26. 21:19
protected = 동일한 package 혹은 상속관계에서 자식에서 접근 가능
임의로 아무런 값이 없는 Engine 클래스 생성
package test.auto; public class Engine { }
Car class 생성
package test.auto; /* * - 접근 지정자 접근범위 * * public : 어디에서나 접근 가능 * protected : 동일한 package 혹은 상속관계에서 자식에서 접근 가능 * default : 동일안 package 안에서만 접근 가능 * private : 동일한 클래스 혹은 동일한 객체 안에서만 접근가능 * * - 접근 지정자를 붙이는 위치 * * 1. 클래스를 선언 할때 * 2. 생성자 * 3. 필드 * 4. 메소드 * * 클래스는 default 와 public 두가지의 접근 지정자만 지정 가능하다 * 접근 지정자를 생략한것이 default 접근 지정자다 */ import test.auto.Engine; public class Car { //필드 protected Engine engine; //Engine 객체를 인잘 전달 받는 생성자 public Car(Engine engine) { //생성자의 인자로 전달받은 값을 필드에 저장하기 this.engine=engine; } //메소드 public void drive() { if(this.engine==null) { System.out.println("Engine 객체가 없어서 달릴수가 없어요."); return; //메소드 끝내기 } System.out.println("달려요~"); } }
Car class를 상속받아 Benz class 생성
package test.auto; public class Benz extends Car{ //Engine type 을 전달 받는 생성자 public Benz(Engine engine) { //부모 생성자를 호출하면서 필요한 값을 전달해 준다. super(engine); } //메소드 public void smoothDrive() { System.out.println("부드럽고 조용하게 달려요!"); } }
package test.main; import test.auto.Benz; import test.auto.Car; import test.auto.Engine; public class MainClass07 { public static void main(String[] args) { //Benz 객체를 생성해서 참조값을 car1 이라는 지역 변수에 담아보세요. //car1 에 들어있는 참조값을 이용해서 달리기도 하고 부드럽게 달리기도 해 보세요. Benz car1=new Benz(new Engine()); car1.drive(); car1.smoothDrive(); } } <console> 달려요~ 부드럽고 조용하게 달려요!
Car class에서 매개변수 값으로 Engine을 선언하였기에 Engine class를 인자값으로 전달한다.
Benz에서도 생성자에 Engine engine이라는 값을 전달해야 되기 때문에 객체를 생성할 때 인자값으로 Engine class를 전달해주어야 된다.
그렇게 되면 Benz class의 생성자에서 super를 사용해 부모 생성자를 호출하면서 필요한 값을 전달해 준다.
그러므로 Car class의 drive메소드 또한 사용할 수 있게 된다.
Car class를 상속받아서 CampingCar class 생성
package test.auto; public class CampingCar extends Car{ public CampingCar(Engine engine) { super(engine); } public void Yaho() { System.out.println("신난다~!"); } }
마찮가지로 객체를 생성할 때, 인자값으로 Engine class를 전달해 주어야된다. 그래야 생성 가능하다.
package test.main; import test.auto.CampingCar; import test.auto.Engine; public class MainClass08 { public static void main(String[] args) { CampingCar cam=new CampingCar(new Engine()); cam.Yaho(); } } <console> 신난다~!
객체를 생성할 때, 인자값으로 Engine class를 잘 전달해주었으니 메소드가 사용 가능하다.
'Java' 카테고리의 다른 글
자바 step9 - AbstractClass(클래스 안에 클래스(내부 클래스)) (0) 2022.11.06 자바 step9 - AbstractClass(override) (0) 2022.11.06 자바 step8 - Extends(extends, casting, Override, super) (0) 2022.10.26 자바 step7 - Array(2) (0) 2022.10.25 자바 step7 - Array(1) (0) 2022.10.25