평소에 노션에 필기한 내용들은 #TodayILearned 해시태그를 붙여 여기 벨로그에 공유하려고 합니다...! 구글이라는 우주에 우주쓰레기마냥 흩어져 있는 개념들을 처리하는 용도로 쓰세요 ゝ。∂)
하이라이트
로 표시했으니참고해 주세요!
또 노트정리 포스팅은 우주쓰레기가 다 정리되는 그 날까지 꾸준히 업로드할 예정이니 많은 관심 부탁드려용
예제로 확인해보자! )
전자제품은 부모 클래스, 전자레인지는 자식 클래스이다. 전자레인지는 전자제품 클래스로부터 상속을 받았으므로 전원 기능이 함수로 명시 되지 않아도 사용할 수 있다.
여러 종류의 객체를 하나의 이름으로 부를 수 있는 것을 일반화하고 한다.
⭐ 즉, 상속 = 일반화(전자제품) + 확장(해동하다)
상자 하나하나는 모두 객체이자 클래스이다. 이러한 계층을 표현하기 위해 만들어진 개념이 상속이다. 또한 하위 객체는 상위 객체(부모)의 특징을 물려받는다.
상속은 결합도가 매우 높은 편이기에 반드시 써야 할때만 상속을 사용하는 것이 좋음. 객체는 응집도가 높고 결합도가 낮은 것이 좋기 때문이다.
[접근 제한자][abstract | final] class 클래스명 extends 부모 클래스명
java.lang.Object
를 상속 받는다. 따라서 모든 클래스는 Object의 자손이다.예)
Car**(참조 타입)** car = new Bus**(인스턴스 타입)**();
Car car = new Bus(); //Car 클래스 속 메소드만 사용할 수 있다.
Bus car = new Bus(); //Bus 클래스에 있는 메소드를 모두 사용할 수 있다.
비유로 접근하기!) 버스를 손으로 가리키면서 “자동차다”라고 말할 수 있다. 버스는 자동차의 한 종류이기 때문이다.
인터페이스이름은 Upper CamelCase로 작성된다.
인터페이스도 확장자가 .java인 파일로 작성한다.
⭐⭐ 인터페이스의 모든 필드는 public static final
이어야 하며, 모든 메소드는 public abstract
이어야 한다. (java 7까지는) final, abstract를 생략하면 자동으로 붙는다.
java 8 부터는 디폴트(default) 메소드와 정적(static) 메소드도 선언이 가능하다.
인터페이스는 추상 클래스처럼 인스턴스로 사용할 수 없다.
구현해야 할 메소드를 목록으로 정리하는 느낌으로 인터페이스를 사용한다.
⭐⭐ 인터페이스를 구현하게 되면 반드시 인터페이스가 갖고 있는 메소드를 오버라이딩할 필요가 있다.
인터페이스는 인스턴스는 될 수 없지만 참조 타입은 될 수 있다.
public abstract class Car2 {
public abstract void run(); //run()메소드를 자식 클래스마다 다르게 하고 싶을 때
}
상속 vs. 인터페이스 vs. 추상 클래스 간 차이점?
⭐ 메소드 OR 변수를 '구현'하는가 그대로 '사용'하는가에 따라서 상속의 형태가 갈리게 된다.
즉, extends는 일반 클래스와 abstract 클래스 상속에 사용되고, implement는 interface 상속에 사용된다.
class가 class를 상속받을 땐 extends를 사용하고, interface가 interface를 상속 받을 땐 extends를 사용한다.
extends는 클래스 한 개만 상속 받을 수 있다. 엄마 아빠가 각각 두 명 될 수 없는 것처럼! 반면 implements는 여러개 사용 가능하다.
implements한 클래스는 implements의 내용을 다 사용해야 한다.
extends는 클래스를 확장하는 거고 implements는 인터페이스를 구현하는 것이다.
예제) 상속 vs. 인터페이스
public class Parents {
protected boolean hairLoss = true;
public void display(){
System.out.println("IM PARENT");
}
}
👆 상속 클래스 선언
public interface Programer {
void programming();
}
public interface Driver {
void drive();
}
👆 인터페이스 선언
public class David extends Parents implements Programer, Driver{
//Parents는 상속, Programmer/Driver는 인터페이스
public David(){ //David는 한번에 하나의 상속 클래스를 상속 받을 수 있다.
if(this.hairLoss == true){
System.out.println("I am hairloss..");
}
}
@Override
public void programming() { //David는 한번에 여러 인터페이스를 받을 수 있다.
System.out.println("I can programming");
}
@Override
public void drive() {
System.out.println("I can drive");
}
}
👆 부모 클래스로부터 상속받고 & 인터페이스도 구현한 클래스
본 포스팅은 부부개발단 님의 '즐거운 자바' 강의를 토대로 작성되었습니다. 질문과 피드백은 언제나 환영입니다. 부족하거나 틀린 부분은 편하게 말씀해주시면 감사하겠습니다!