1. 상속
- 공통된 코드가 있을 경우 기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것이다.
public class Child extends Parent{ //코드 }
- 자식 클래스는 부모 클래스의 모든 멤버를 상속받기 때문에 멤버를 따로 정의하지 않고도 부모 클래스의 멤버를 사용할 수 있다.
- 생성자와 초기화 블럭은 상속되지 않고 멤버만 상속된다.
- 자식 클래스의 멤버 개수는 항상 부모 클래스의 멤버 개수보다 같거나 많아야 한다.
- 자바에서는 단일 상속만을 허용한다.
2. 장점
- 코드의 재사용성을 높인다.
- 코드의 중복을 제거한다.
- 이를 통해 생산성과 유지보수를 쉽게 하는데 도움을 준다.
3. 포함관계와 상속관계
1) 포함관계
- 한 클래스의 멤버변수로 다른 클래스 타입의 참조변수를 선언하는 것을 말한다. (A는 B를 가지고 있다 -> 회원은 주소를 가지고 있다.)
- 하나의 큰 클래스를 작성하는 것보다 여러 개의 클래스로 쪼개서 작성한 후, 포함관계를 이용하면 간결하고 가독성 높게 코드를 작성할 수 있고 코드의 재사용성도 높아진다.
// 포함관계
public class User{
private Long id;
private String userId;
private String username;
private String password;
private String email;
private Address address;
...
}
public class Address{
private String country;
private String city;
private String street1;
private String street2;
private String zipcode;
...
}
2) 상속관계
public class MacBook {
public String color;
public int ram;
public int ssd;
public MacBook() {
this.color = "silver";
this.ram = 8;
this.ssd = 128;
}
public MacBook(String color, int ram, int ssd) {
this.color = color;
this.ram = ram;
this.ssd = ssd;
}
public void turnOn() {
String model = "Macbook";
System.out.println("turned on " + model);
}
@Override
public String toString() {
return "MacBook{" +
"color='" + color + '\'' +
", ram=" + ram +
", ssd=" + ssd +
'}';
}
}
public class MacBookPro extends MacBook{
private boolean touchbar;
public MacBookPro() {
super();
}
public MacBookPro(String color, int ram, int ssd) {
super(color, ram, ssd);
}
public MacBookPro(String color, int ram, int ssd, boolean touchbar) {
super(color, ram, ssd);
this.touchbar = touchbar;
}
@Override
public void turnOn() {
if (touchbar) {
System.out.println("turned on MacBookPro");
System.out.println("this has touchbar");
}else{
System.out.println("turned on MacBookPro");
}
}
@Override
public String toString() {
return "MacBookPro{" +
"color='" + color + '\'' +
", ram=" + ram +
", ssd=" + ssd +
", touchbar=" + touchbar +
'}';
}
}
4. Object