-
자바 스터디 2회차 - 상속, 다형성, 인터페이스, 추상, 접근제어자카테고리 없음 2024. 4. 8. 18:01
상속!
기존의 클래스를 재사용해 새로운 클래스를 작성하는 것, extends 사용
- 자손 클래스는 조상 클래스의 모든 멤버를 상속받음 (단, 생성자와 초기화 블럭은 상속되지 않음)
- 자손 클래스의 멤버 개수는 조상 클래스보다 항상 같거나 많다. 자손 >= 조상
조상 클래스의 인스턴스를 생성하지 않고도 조상 클래스의 멤버들 사용 가능
다형성!
조상 타입 참조 변수로 자손 타입 객체를 다루는 것
*** Tv t = new SmartTv(); // 타입 불일치
있는 기능 안 쓰는 건 됨, 기능이 없는데 버튼을 누르는 건 안됨
조상 -> 자손 / 가능
자손 -> 조상 / 불가능
추상메서드!
추상 메서드 = 미완성 메서드(선언부만 있는, 몸통 {} 구현부가 없는 미완성 메서드)
abstract << 가 있으면 추상 메서드를 가지고 있구나, 몸통 없는 메서드 앞에도 붙여야 함, 강제하는 효과
추상 클래스
미완성 설계도, 미완성 메서드를 갖고 있는 클래스
다른 클래스를 작성하기 위해 도움을 주는 것, 설계도가 미완성임
제품을 못만듬 인스턴스 생성 안됨 객체 만들면 에러남
다른 클래스에 추상클래스를 상속해서 추상메서드를 구현(몸통{} 만들기), 구현시 더 이상 추상 메서드가 아님
인스턴스 생성 가능
꼭 필요하지만 자손마다 다르게 구현될 것으로 예상될 때, 몸통{ }에 각기 다르게 작성될 때
추상 클래스 안에 추상 메서드가 2개 있을 경우, 2개 다 쓰면 완전한 클래스
둘 중 하나만 쓰면 추상 클래스여서 abstract를 붙여줘야 함
보이진 않지만 상속받음 2개 다 물려받았으면 2개 다 해줘야 됨
추상 클래스는 상속을 통해 완성해야 객체 생성 가능, 변경에 유리
인터페이스! = 추상 메서드의 집합, 추상 메서드만 쭉 적어놓은 추상 클래스
구현된 것이 하나도 없는 설계도. 가장 껍데기, 모든 멤버가 퍼블릭 // 상수, 스태틱 메서드, 디폴트 메서드 가질 수 있긴 함
인터페이스를 구현한다 = 추상 클래스를 완성한다
implements만 다름
인터페이스의 제약 사항
1. 모든 멤버 변수는 public static final이어야 하지만 생략 가능
2. 모든 메서드는 public abstract 이어야 하지만 생략 가능
정의된 모든 멤버에 예외 없이 적용되는 사항이기 때문에 제어자 생략 가능 컴파일 시 자동으로 추가
추상 클래스와 인터페이스의 공통점
추상 메서드를 가짐(미완성 설계도)
추상 클래스와 인터페이스의 차이점
인터페이스는 iv를 가질 수 없음 , 인터페이스는 추상메서드만 가짐
일반 클래슨데 추상메서드를 가짐(생성자, 인스턴스를 가짐)
상수는 됨, 변수는 안됨, 몸통 없음
인터페이스의 조상은 인터페이스만 가능, 조상 클래스와 다중 상속 가능, 추상 메서드는 충돌해도 문제없음
인터페이스 구현 = 인터페이스에 정의된 추상 메서드의 몸통을 만들어주는 클래스를 작성해야 할 땐
구현한다는 의미의 implements 사용
만일 구현하는 인터페이스의 메서드 중 일부만 구현한다면 abstract를 붙여서 추상 클래스로 선언해야 함
그리고 상속과 구현을 동시에 할 수도 있음!
인터페이스의 다형성 = 메서드의 매개변수의 타입으로 사용 가능
메서드 호출 시 해당 인터페이스를 구현한 클래스의 인스턴스를 매개변수로 제공해야 함
메서드의 리턴타입으로 인터페이스를 지정하는 것도 가능
>>>리턴타입이 인터페이스라는 것은 메서드가 해당 인터페이스를 구현한 클래스의 인스턴스를 반환한다는 것을 의미<<<
접근제어자!
해당하는 멤버 또는 클래스를 외부에서 접근하지 못하도록 제한하는 역할
생일이 껴있어서 놀았다. 핑계 맞다.