상속
키워드 : extend class명
class를 객체로 new 연산자를 활용하여 생성하게 되면 heap공간에 할당이 되는데 상속관계에 있는 class도 같이 메모리 공간에 할당된다 즉, 메모리 공간이 확장된다는 개념으로 생각하면 된다. 부모 class와 자식 class의 메모리 공간은 나눠져 있지만 상속된 class를 생성하면 부모 class도 메모리에 같이 메모리가 생성된다.
상속 코드
부모class Car
package j13_상속;
public class Car {
private String company;
private String model;
private int price;
public Car() {
System.out.println("부모");
}
public String getCompany() {
return company;
}
public void setCompany(String company) {
this.company = company;
}
public String getModel() {
return model;
}
public void setModel(String model) {
this.model = model;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public int discountPrice(int percentage) {
return price - (price * percentage / 100);
}
}
Car를 상속받은 KiaCar
package j13_상속;
public class KiaCar extends Car{
public KiaCar() {
super();//나의 상위 객체를 의미한다. kiaCar -> Car의 생성자가 호출됨 super는 생성자 제일 상위에 있어야함
//부모클래스가 먼저 생성 되어야 함
System.out.println("자식");
}
@Override//오버라이드를 하지 않는다면 부모 클래스에서 바로 들고오고,
//오버라이드를 한다면 자식 클래스 메소드를 통해서 가져오는 것 -> 주소가 다르기 때문에 오버로딩과는 다른 개념이다.
public int discountPrice(int percentage) {
return super.discountPrice(percentage);
}
public void test() {
KiaCar kc = this;//자신의 주소를 변수로 쓰고 싶을 때
}
}
Method 오버라이드
method 오버라이드는 부모가 가진 method를 자식 class에서 재정의 하는 것을 말한다. method 오버라이드가 가능한 이유는 부모class와 자식class의 메모리 주소가 다르기 때문이다. 생성은 같이 생성 되지만 메모리 공간은 다르다. 재정의는 부모의 method 주소를 끊어버리고 자식class에서 정의하는것을 말한다. 단 오버라이드시 메소드명이나 매개변수 자료형이 달라지면 안된다.