Notice
Recent Posts
Recent Comments
Link
컴퓨터는 잘못이 없다..
[JAVA]상속 퀴즈1 본문
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을 넘겨주기 때문에 이와같은 결과가 생긴다.
'공부 > JAVA' 카테고리의 다른 글
[JAVA]상속 퀴즈2 (0) | 2020.12.29 |
---|---|
[JAVA]Eclipse 단축키정리 (0) | 2020.12.29 |
[JAVA]부모클래스 생성자에 필요한 값을 전달해주는 문법 super(), 다른패키지에 있는 클래스를 상속받으려면 import해주어야 한다. (0) | 2020.12.29 |
Comments