● super
- 부모클래스를 의미한다.
● 부모클래스에 있는 메소드 호출하는 방법
- super.메소드()
● 부모클래스의 생성자를 호출하는 방법
- super();
- 항상 부모생성자가 가장 먼저 호출되어야 한다.
● instanceof( : 연산자)
- 해당 타입의 인스턴스인지 판별해준다.
(ex) myCar instanceof Car : myCar는 Car 타입의 instance인가?
→ 맞으면 true, 틀리면 false
● Object 클래스
- 최상위 클래스
- 자바의 모든 클래스는 Object 클래스를 상속받는다.
● 형변환(casting)
1. up casting
- 부모타입에 자식 값을 넣는 문법(자식타입 → 부모타입)
2. down casting
- 자식타입에 부모 값을 넣는 문법(부모타입 → 자식타입)
● casting의 목적
- 여러 타입을 하나로 묶어 관리할 수 있다.
실습(부모 클래스의 메소드 및 생성자 호출)
1. 부모 클래스(Car.java) 생성
public class Car {
String name;
int price;
String color;
public Car(String name, int price, String color) {
this.name = name;
this.price = price;
this.color = color;
}
public void go() {
System.out.println("앞으로 갑니다");
}
public void engineOn() {
System.out.println("열쇠로 시동을 켰습니다");
}
public void show() {
System.out.println("-----자동차 정보-----");
System.out.println("차주 : " + this.name);
System.out.println("색깔 : " + this.color);
System.out.println("가격 : " + this.price);
}
}
2. 자식 클래스(SuperCar.java) 생성
public class SuperCar extends Car{
String mode;
public SuperCar(String name, int price, String color, String mode) {
// 항상 부모생성자가 제일 먼저 호출되어야 한다.(super와 this 순서르 바꿀 수 없다.)
super(name, price, color); // super() : 부모생성자를 의미한다.
this.mode = mode;
}
@Override
public void show() {
// super.메소드()로 부모클래스의 메소드를 사용할 수 있다.
super.show(); // super : 부모클래스를 의미한다.
System.out.println("모드 : " + this.mode);
}
@Override
public void engineOn() {
System.out.println("버튼으로 시동을 켰습니다.");
}
public void openRoof() {
System.out.println("지붕을 열었습니다.");
}
}
3. Main.java 에서 실행
public class Main {
public static void main(String[] args) {
Car momCar = new Car("엄마", 100, " blue");
SuperCar myCar = new SuperCar("홍길동", 1000, "red", "sports");
// myCar.mode = "normal"; // 자식에서 새롭게 정의된 변수는 부모타입에서 사용 불가능
momCar.show();
momCar.go();
momCar.engineOn();
// momCar.openRoof(); // 자식에서 새롭게 정의된 메소드는 부모타입에서 사용 불가능
myCar.show();
myCar.go();
myCar.engineOn();
myCar.openRoof();
}
}
![](https://blog.kakaocdn.net/dn/eCEZG7/btrroFQJAQ9/RXcfKxu7V4pDhWM2KF2Gl1/img.png)
실습(instanceof)
public class Main {
public static void main(String[] args) {
Car momCar = new Car("엄마", 100, " blue");
SuperCar myCar = new SuperCar("홍길동", 1000, "red", "sports");
System.out.println(momCar instanceof Object); //true
System.out.println(momCar instanceof Car); //true
System.out.println(momCar instanceof SuperCar); //false
System.out.println(myCar instanceof Object); //true
System.out.println(myCar instanceof Car); //true
System.out.println(myCar instanceof SuperCar); //true
}
}
![](https://blog.kakaocdn.net/dn/beZr5m/btrrpUzCgxJ/fY34WkqyvIfO0qElbKTl20/img.png)
실습(casting)
1. up casting
public class Main {
public static void main(String[] args) {
Car momCar = new Car("엄마", 100, " blue");
SuperCar myCar = new SuperCar("홍길동", 1000, "red", "sports");
Car c = (Car)myCar; // (Car)는 생략 가능하다.
c.go(); // 부모에도 원래 있던 메소드는 사용이 가능하다.
// c.openRoof(); // 자식에서 새롭게 만든 메소드는 up casting 후 사용이 불가능하다.
// c.mode = "normal"; // 자식에서 새롭게 추가된 인스턴스 변수는 사용이 불가능하다.
c.engineOn(); // 자식에서 오버라이딩 된 메소드는 재정의가 된 상태 그대로 사용된다.
System.out.println(c instanceof SuperCar);
}
}
![](https://blog.kakaocdn.net/dn/cWKJGx/btrroW5PgV5/88fvMJoBRMuf1fXs5Nm5m0/img.png)
2. down casting
public class Main {
public static void main(String[] args) {
Car momCar = new Car("엄마", 100, " blue");
SuperCar myCar = new SuperCar("홍길동", 1000, "red", "sports");
Car c = (Car)myCar;
// 애초에 부모를 자식에 넣는 것은 말이 되지 않는다(타입도 일치하지 않고 부족하기 때문)
// SuperCar s = momCar;
SuperCar s = (SuperCar)c; // (Super)는 생략할 수 없다.
}
}
3. object 타입의 배열 생성
public class Main {
public static void main(String[] args) {
String test = "test";
// 자동 up casting(Object에 있는 메소드만 사용할 수 있다.)
Object[] ar = {myCar, momCar, test};
}
}