객체를 만들 때 반드시 지켜야 하는 필수 데이터를 설정하는 코드
부모 클래스의 생성자가 있다면 자식 클래스는 반드시 이를 고려해서 코드를 구현해야함
public class Phone {
// private String number; //자식클래스에서 직접 접근이 안됨(절대적인 규칙)
protected String number; //자식클래스는 위치 무관하고 자유롭게 접근이 가능(개조 가능)
public void videoCall() {
System.out.println("영상통화 기능 실행");
}
public final void sms() { //final를 추가하면 재정의(override)가 불가능하다.
System.out.println("문자 기능 실행");
}
// 휴대폰이라면 전화번호가 반드시 있어야 한다 ---> 생성자 구현
public Phone(String number) {
this.number = number;
}
}
기존 메서드의 코드가 마음에 들지 않아 다른 코드로 교체하고 싶을 때 사용
부모 클래스에 있는 형태와 똑같이 구현 (이름까지도 똑같아야 함)
@Override와 같은 코드를 어노테이션(Annotation)이라고 한다.
@Override라는 명찰을 부착하여 하단 코드의 역할을 규정 해준다.
public class IPhone14 extends Phone {
public void info() {
//System.out.println("전화번호 : " + this.number); //내 클래스 것
//System.out.println("전화번호 : " + super.number); //부모 클래스 것
System.out.println("전화번호 : " + number); //this가 생략됨
}
@Override
public void videoCall() {
System.out.println("영상통화 기능을 사용할 수 없습니다");
}
-> 부모 클래스인 Phone에서 생성 시 필요한 number를 전달할 수 있는 생성자를 구현
-> 이 요구사항을 지키지 못하면 상속은 근본적으로 불가능하다.
public IPhone14(String number) {
super(number); //부모 클래스의 생성자를 number를 전달한다!
}
}
클래스에 abstract라고 꼭 표시를 해야 한다.
객체 생성이 불가능하다.
추상 메서드를 가질 수 있다.
public abstract class Mobile {
//필드 - 일반 클래스와 달라지는 부분이 없다
protected String number;
protected String color;
//생성자 - 일반 클래스와 동일
public Mobile(String color) {
this.color = color;
}
추상 메서드와 일반 메서드로 구현
추상 메서드는 이름은 아는데 내용을 모를 때 사용
추상 메서드로 만들 경우 꼭 구현 해야한다.
추상 메서드는 추상 클래스 안에서만 생성할 수 있다.
final을 사용하면 수정을 절대 할 수 없다. (final은 잘 사용하지 않는다.)
public abstract void call();
public abstract void sms();
public void output() {
System.out.println("번호 : " + number);
System.out.println("색상 : " + color);
}
}
-다중상속 전용 클래스
-상속에서 부모 클래스는 무조건 1개만 가능하다.
-클래스는 종류가 여러 가지가 있다.
= 클래스만 있는게 아니라 다중상속을 위한 또 다른 클래스가 존재한다.
= (다중상속을 위한 또 다른 클래스)인터페이스라고 부른다.
-상속에서 부모 클래스(+인터페이스)는 많을 수록 좋다.
public interface Singer {
// 필드
// - 인터페이스는 변수가 없다. (상수만 있으며, 키워드 생략 가능)
// private int a; // 변수
// public static final int a = 10; // 상수 : 변하지 않는 값
// int a = 10;
// 생성자(constructor)
// - 필드가 없으니 생성자가 없다
// public Singer() {}
// 메소드(method)
// - 오직 추상 메소드만 가질 수 있다(~java 7 까지)
// - 키워드를 안적어도 자동 추가된다.(public, abstract)
// - java 8부터는 default 메소드를 가질 수 있다(Lambda에 활용)
// public abstract void sing() {}
void sing();
}
추상클래스는 여전히 extends로 한 개만 상속이 가능하다
인터페이스는 implements 와 콤마로 여러 개 상속이 가능하다
public class Yu implements MC, Singer, Comedian {
@Override
public void gag() {
}
@Override
public void sing() {
}
@Override
public void talk() {
}
}