Java
스파르타 부트캠프 Java 추상클래스와 상속 정리 (다락방)
H.S-Backend
2024. 5. 29. 11:31
클래스 설계구조(다이어그램)
Iphone에도 call이 있다.
@Override
public void call(){
System.out.println("아이폰에서 전화가 울렸습니다");
}
Sausung에도 call이 있다.
@Override
public void call(){
System.out.println("갤럭시에서 전화가 울렸습니다.");
}
이렇게 각자의 행위를 수정해야 사용을 한다면 ?
Interface로 빼서 사용을 하는게 좋다
public interface Phone {
void call();
}
이유?
사람이 코드 구현 설계를 하다가
call()행위에 대한 메서드를 정의 해 놓지 않으면
or
Itelli J에서는
call()행위에 대한 메서드를 정의 해 놓지 않으면
컴파일 에러가 발생한다.
추상클래스 같은 경우
sarch() 을 예를들자면
search 메서드안의 검색하다라는 print가 정의되있다.
public abstract class SmartPhone implements Phone, Camera {
private String brand;
public void search(){
System.out.println("검색하다");
};
SmartPhone을 상속받는
Iphone과 Galaxy,
Iphone을 상속받는 IPhone15도
search메서드 행위를 사용할 수 있다.
결국
변경을 하지않아도 사용할 수 있고 변경을 해서 사용해도 되는것.
Abstract = 추상클래스
각자의 클래스에서 Interface안의 지정된 행위를
필수로 구현해서 정의해야되고
정의한 메소드(행위)를
각 클래스 특성마다 맞게 수정해서 사용해야되는것
Interface = 인터페이스
public interface Phone {
void call();
}
public class Main {
public static void main(String[] args) {
IPhone iPhone = new IPhone("15");
Iphone15 iphone15 = new Iphone15();
Galaxy galaxy = new Galaxy("23");
//Interface에 있는 call메스드를 사용할 수 있다.
iPhone.call();
galaxy.call();

public class Main {
public static void main(String[] args) {
IPhone iPhone = new IPhone("15");
Iphone15 iphone15 = new Iphone15();
Galaxy galaxy = new Galaxy("23");
//Interface에 있는 call메스드를 사용할 수 있다.
iPhone.call();
galaxy.call();
iphone15.call();
이렇게 각각의 클래스 특성에 맞게 정의해서 사용하는것이
Interface
public abstract class SmartPhone implements Phone, Camera {
private String brand;
public void search(){
System.out.println("검색하다");
};
public class Main {
public static void main(String[] args) {
IPhone iPhone = new IPhone("15");
Iphone15 iphone15 = new Iphone15();
Galaxy galaxy = new Galaxy("23");
//SmartPhone에 있는 search를 상속받아 사용
iPhone.search();
galaxy.search();
iphone15.search();
SmartPhone에 정의되있는걸 가져와서 사용해도되고 변경해서 사용할 수 있다.
@Override
public void search() {
System.out.println("사파리에서 검색");
}
@Override
public void search() {
System.out.println("구글에서 검색");
}

반응형