Car 클래스의 생성자 예제
class Car {
private String modelName;
private int modelYear;
private String color;
private int maxSpeed;
private int currentSpeed;
Car(String modelName, int modelYear, String color, int maxSpeed) {
this.modelName = modelName;
this.modelYear = modelYear;
this.color = color;
this.maxSpeed = maxSpeed;
this.currentSpeed = 0;
}
}
Car 클래스의 this 참조 변수와 this() 메소드 사용 예제
class Car {
private String modelName;
private int modelYear;
private String color;
private int maxSpeed;
private int currentSpeed;
Car(String modelName, int modelYear, String color, int maxSpeed) {
this.modelName = modelName;
this.modelYear = modelYear;
this.color = color;
this.maxSpeed = maxSpeed;
this.currentSpeed = 0;
}
Car() {
this("소나타", 2012, "검정색", 160); // 다른 생성자를 호출함.
}
public String getModel() {
return this.modelYear + "년식 " + this.modelName + " " + this.color;
}
}
public class Main {
public static void main(String[] args) {
Car tcpCar = new Car();
System.out.println(tcpCar.getModel());
}
}
super 키워드 예제
class Parent {
int a = 10;
}
class Child extends Parent {
int a = 20;
void display() {
System.out.println(a); // 20
System.out.println(this.a); // 20
System.out.println(super.a); // 10
}
}
public class Inheritance03 {
public static void main(String[] args) {
Child ch = new Child();
ch.display();
}
}
만약 개발자가 자식 클래스의 생성자에서 부모 클래스의 생성자를 명시적을 호출해주지 않는다면, 모든 자식 클래스의 생성자 첫 줄에 자바 컴파일러가 자동으로 super() 명령문을 추가한다.
또한 자바 컴파일러는 컴파일 시 클래스에 생성자가 하나도 정의되어 있지 않아야만 자동으로 기본 생성자를 추가해준다.
하지만 개발자가 부모 클래스에서 매개변수를 가지는 생성자를 하나라도 선언했고, 매개변수가 없는 기본 생성자를 선언하지 않았다면, 컴파일러는 부모 클래스에 기본 생성자를 자동으로 추가하지 않는다.
따라서 아래 예제는 부모 클래스에 매개변수가 있는 생성자만 있기 때문에 오류가 발생한다
class Parent {
int a;
Parent(int n) { a = n; } // 매개변수가 있는 생성자만 존재(이미 생성자가 존재하기 때문에 자바 컴파일러가 자동으로 기본 생성자를 추가해주지 않고, 개발자가 작성한 매개변수가 없는 기본 생성자가 없음)
}
class Child extends Parent {
int b;
Child() {
super();
b = 20;
}
}
매개변수가 있는 생성자만 존재할 경우 아래와 같이 기본 생성자도 명시적으로 선언해야 한다.
class Parent {
int a;
Parent() {a = 10;};
Parent(int n) { a = n; } // 매개변수가 있는 생성자만 존재(이미 생성자가 존재하기 때문에 자바 컴파일러가 자동으로 기본 생성자를 추가해주지 않고, 개발자가 작성한 매개변수가 없는 기본 생성자가 없음)
}
class Child extends Parent {
int b;
Child() {
super();
b = 20;
}
}
super() 메소드 호출 예제
class Parent {
int a;
Parent() { a = 10; }
Parent(int n) { a = n; }
}
class Child extends Parent {
int b;
Child() {
//super(40);
b = 20;
}
void display() {
System.out.println(a); // 10 출력
System.out.println(b); // 20 출력
}
}
public class Main {
public static void main(String[] args) {
Child ch = new Child();
ch.display();
}
}