컴퓨터는 잘못이 없다..

[JAVA]부모클래스 생성자에 필요한 값을 전달해주는 문법 super(), 다른패키지에 있는 클래스를 상속받으려면 import해주어야 한다. 본문

공부/JAVA

[JAVA]부모클래스 생성자에 필요한 값을 전달해주는 문법 super(), 다른패키지에 있는 클래스를 상속받으려면 import해주어야 한다.

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

[핵심]

1. 부모클래스 생성자에 필요한 값을 전달해주는 문법인 super에 대해 알아보자. 

 

[예제코드]

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("엄청 빨리 달려요!");
		
	}
	

	

}

 

 

[예제코드 설명]

 

01. 다른패키지에 있는 클래스를 상속받으려면 import해주어야 한다.

 

▼SuperCar.java

 

02. 부모클래스 생성자에 필요한 값을 전달해주는 문법인 super에 대해 알아보자.

▼SuperCar.java

└ Car을 상속받은 SuperCar을 생성할 때 부모의 생성자를 임의로 호출하지 않으면, 부모 class의 기본 생성자가 자동으로 호출된다. 그런데 부모클래스인 Car에는 기본생성자가 없고 매개변수가 있는 생성자만 있다. 따라서 컴파일 오류가 발생한다. (코드 작성하자마자 빨간줄이 뜸) 따라서 자식클래스의 생성자에 super()메소드를 통해 부모의 매개변수가 있는 생성자를 호출하며 값을 전달해주면 된다. 

 

 

Comments