참고자료
객체지향프로그램의 특징
상자 하나하나는 모두 클래스(class)입니다.
이러한 계층을 표현하기 위해 만들어진 것이 바로 상속입니다.
하위 객체는 상위 객체 (부모)의 특징을 물려받습니다.
이 메소드 OR 변수를 '구현'하는가 그대로 '사용'하는가에 따라서 상속의 형태가 갈리게 됩니다.
extends
부모에서 선언, 정의를 모두하며 자식은 메소드, 변수를 그대로 사용할 수 있음
implements (interface 구현)
부모 객체는 선언만 하며 정의(내용)은 자식에서 오버라이딩해서 사용해야함
// 부모 클래스
class Vehicle {
protected int speed = 10;
public int getSpeed(){
return speed;
}
public void setSpeed(int speed){
this.speed = speed;
}
}
// 자식 클래스
class Car extends Vehicle{
public void printspd(){
System.out.println(speed);
}
}
// 메인 클래스
public class Main {
public static main (String[] args){
Car A = new Car();
System.out.println(A.getSpeed());
A.printspd();
}
}
위의 코드에서 Car
클래스는 Vehicle
을 상속 받았습니다.
따라서 부모 클래스의 getSpeed()
메소드로 speed
를 반환받을 수 있고
Car
클래스의 printspd
메소드에서 speed
변수를 직접 바로 사용할 수도 있습니다.
extends
를 했으니 메소드 뿐만 아니라 변수까지 사용이 가능해 지는 것입니다.
여기서 특징은 Java는 "다중상속"을 지원하지 않는다는 입니다.
다중상속이란 부모 클래스가 두개 이상 존재할 수 있다는 것인데, 자바에서는 이를 지원하지 않습니다.
코드로 설명하자면, public class Son extends Father, Mother{...}
같은 코드는 지원하되지 않는다는 것입니다..
이를 해결하기 위해 존재하는 것이 implements
(인터페이스)입니다.
코드에서 protected
를 사용했는데 여기서 접근제어자에 대해 가볍게 설정하자면
public
: ALL
protected
: 상속 OR 동일 패키지
default
: 상속 && 동일패키지
private
: 클래스, { }내부
interface
를 상속하기 위해 사용됩니다.// 부모 클래스 (인터페이스)
interface TestInterface{
public static int num = 8;
public void fun1();
public void fun2();
}
// 자식 클래스
class InterfaceExam implements TestInterface{
@Override
public void fun1(){
System.out.println(num);
}
@Override
public void fun2() {
}
}
// 메인 함수
public class Main{
public static void main(String args[]){
InterfaceExam exam = new InterfaceExam();
exam.fun1();
}
}
implements
를 사용하면 public class Son implements Father, Mother{...}
같은 코드가 가능해집니다.
implements
의 가장 큰 특징은 이렇게 부모의 메소드를 반드시 오버라이딩해야 한다는 것입니다.
fun1
, fun2
와 같은 함수를 interface
에 정의만 하고 자식 클래스에서 오버라이딩하는 것입니다.
내용을 좀 더 추가하자면
implement
는interface
상속에 사용하지만interface
가interface
를 상속 받을 땐extends
를 사용해야합니다.implements
한 클래스는implements
의 내용을 다 사용해야 합니다.implements
는 설계 목적으로 구현 가능하다.
참고 자료 :
https://velog.io/@hkoo9329/%EC%9E%90%EB%B0%94-extends-implements-%EC%B0%A8%EC%9D%B4