컴퓨터는 잘못이 없다..

[JAVA]상속 퀴즈1 본문

공부/JAVA

[JAVA]상속 퀴즈1

도토리까꿍v 2020. 12. 29. 17:57
Contents 접기

[퀴즈]

아래 코드르 보고 MainClass10.java 의 실행결과를 예상해보시오.

 

Car.java

package test.auto;

/*
접근지정자 4가지
1. public - 모두 공개
2. protected - in package or another package + child (같은 패키지라면 공개하겠다 or 다른 패키지더라도 상속관계이면 공개하겠다.)
3. defalut(접근지정자를 적지 않음) - in package
4. private - in object or in class

in object or in class의 의미 
private static String name -> 클래스 안에서만 공개
private String name -> 객체 안에서만 공개 
static 필드는 클래스에 만들어지는 필드
non static 필드는 객체 안에 만들어지는 필드

*class의 접근지정자는 public과 defalut만 쓰며, import 가능여부를 지정해준다. 보통은 public을 쓴다.*

*/


//class의 접근지정자는 import 가능여부를 정해준다.
public class Car {
	//protected 접근 지정자를 가진 필드
	protected Engine engine;
	
	//Engine type을 인자로 전달 받는 생성자
	public Car(Engine engine) {
		this.engine= engine;
	}
	
	//메소드
	public void drive() {
		if(this.engine==null) {
			System.out.println("Engine이 없어서 달릴수가 없어요!");
			return; //메소드 끝내기
		}
		System.out.println("달려요!");
	}
	

}

 

Engine.java

package test.auto;

public class Engine {

}

 

SuperCar.java

/*선생님 코드랑 비교 끝*/
package test.mypac;

import test.auto.Car;
import test.auto.Engine;
/*
import시 주의할 점
클래스 이름이 달라도 패키지명이 다르면 다른 클래스이다!
ex) test.auto.Car 과 test.passive.Car 이라면 Car은 다른 클래스임!
*/

public class SuperCar extends Car{

	//Engine type을 전달받는 생성자. 
	//부모의 생성자를 임의로 호출하지 않으면, 부모 class의 기본 생성자가 자동으로 호출된다.
	//그런데 부모의 기본생성자가 없으면 Car을 상속받은 SuperCar에서 컴파일 오류가 발생한다.
	//따라서 자식클래스의 생성자에서 직접 부모의 생성자를 호출해주어야한다. 
	//public class SuperCar extends Car 을 적어줄 때 빨간색 오류가 뜬다.
	//그때 빨간줄에 커서를 갖다대 addConstructor을 통해 인자를 넘겨주어야하는 코드를 작성해주어야한다.
	public SuperCar(Engine engine) {
		//부모 생성자에 필요한 값을 전달해 주는 문법 super()
		//부모 생성자를 호출하는 예약어 super()
		//super()은 부모 생성자를 호출해주고, 부모 생성자에 필요한 값을 전달해주는 문법이다!
		super(engine);
	}
	
	//빨리 달리는 메소드
	public void driveFast() {
		if(this.engine == null) {
			System.out.println("Engine객체가 없어서 달릴수가 없어요!");
			return; //메소드 끝내기
		}
		System.out.println("엄청 빨리 달려요!");
		
	}
	

	

}

 

MainClass10.java

package test.main;

import test.auto.Engine;
import test.mypac.SuperCar;

public class MainClass10 {
	public static void main(String[] args) {
		SuperCar car1 = new SuperCar(new Engine());
		car1.drive();
		car1.driveFast();
		
		SuperCar car2 = new SuperCar(null);
		car2.drive();
		car2.driveFast();
	}
}

 

 

[퀴즈 답]

달려요!
엄청 빨리 달려요!
Engine이 없어서 달릴수가 없어요!
Engine객체가 없어서 달릴수가 없어요!

└ car1은 Engine 객체의 참조값을 생성자를 통해 넘겨주는 반면

car2는 null을 넘겨주기 때문에 이와같은 결과가 생긴다.

 

Comments