자바기초(챕터7 정리)

bitna's study note·2022년 5월 1일
0

자바

목록 보기
62/119

5월1일 주말공부

챕터7(특수 클래스와 인터페이스 정리하기)

1.추상클래스
일반 클래스는 new연산자를 사용해 인스턴스를 생성할 수 있지만,추상클래스는 인스턴스를 생성할 수 없고 오직 상속을 통한 자식클래스를 구현한 후에 인스턴스를 생성할 수 있다.
추상클래스는 단독으로 사용 될수 업지만, 새로운 클래스를 작성하는 데 밑바탕이 될 수 있다.

2.추상메서드
메서드 본체를 완성하지 못한 메서드를 추상메서드라고 한다.
추상메서는 무엇을 할지는 선언 하지만 어떻게 할지는 구현할 수 없다.

3.추상클래스는 주로 상속 계층에서 자식 멤버(필드,메서드)의 이름을 통일하는데 사용된다.
추상클래스는 보통 하나이상의 추상 메서드를 포함하는데, 상황에 따라서 포함하고 있지 않을수도 있다.

4.추상클래스도 필드와 메서드를 포함할 수 있다. 심지어 생성자도 포함할수 있는데, 자식 클래스가 부모 생성자 super()를 호출 할수 있기 때문이다.

5.abstract class 클래스이름{
//필드
//생성자
//추상 메서드
abstract 반환타입 메서드 이름();
}

6.인터페이스
사전에 정한 약속이나 규격을 말함.
왜? 제품을 나누어 개발한 후 하나로 합칠때 문제가 생길수 있기때문

-인터페이스를 사용하면 통합에 신경쓰지 않고 다양한 형태로 새로운 클래스를 개발할 수 있다.

-클래스는 다중상속을 지원하지 않지만, 인터페이스로 다중상속 효과를 간접벅으로 얻을 수 있다.

7.인터페이스는 클래스와 문법이 유사하지만 인스턴스 변수를 선언할 수 없고, 객체도 생성할수 없기 때문에 생성자가 없다.
interface 인터페이스이름{
//상수필드
//추상메서드
//디폴드메서드
//정적메서드
//비공개메서드
}

8.인터페이스 멤버에 명시된 public, static, final, abstract 키워드는 생략할 수 있다.

9.자바8 부터는 기존 인터페이스에 새로운 기능을 추가 할수 있도록 디폴드메서드 를 지원한다.
default 반환타입 디폴드 메서드 이름(){구현코드}

10.클래스와 인터페이스 관계
자식class-> extends 상속 -> 부모class
자식interface-> extends 상속 -> 부모interface
자식interface-> implements 구현-> 부모class

11.여러개의 인터페이스를 상속받아 새로운 자식 인터페이스 or 구현 클래스를 작성 할 수 있다.
자식interface extends 부모interface1,부모interface2
자식class implements 부모interface1,부모interface2

12.상수를 인터페이스에 정의하면 여러 종류의 클래스에서 사용할 수 있어 편리하다.

13.인터페이스도 하나의 타입이므로 변수를 인터페이스 타입으로 선언 할 수 있다.

인터페이스타입 변수 =구현 객체

인터페이스 타입에 다양한 인터페이스 구현 객체를 대입하면 구현 객체의 종류에 따라 다르게 실행할 수 있다.

인터페이스 타입 변수로는 인터페이스 멤버만 볼 수 있고 구현 클래스에 추가된 멤버는 볼수 없다.
추가된 멤버에 접근 할려면 강제 형변환을 해야 한다.

14.중첩클래스나 중첩인터페이스는 외부로부터 스스로를 감추며, 외부 클래스와 강한 관계를 가질수 있다. 또 중첩클래스는 외부클래스의 private멤버를 비롯 모든 멤버에 접근이 자유롭다.

15.중첩 클래스는 멤버클래스와 지역클래스로 나뉨.
중첩 클래스
-멤버클래스
--static(정적)멤버클래스
--내부클래스(인스턴스멤버클래스)
-지역클래스

16.지역클래스는 지역변수처럼 메서드 내부에서만 사용하므로 abstract나 final로만 지정 할 수 있다.
이는 메서드가 종료되어 지역변수가 소멸되더라도 지역클래스가 소멸된 지역변수를 변경하지 못하도록 하기 위해서다.

class 외부클래스{
class 멤버클래스{
}
interface 중첩인터페이스{
}
}

class 외부클래스{
void 메서드(){
class 지역클래스{
}
}
}

17.중첩클래스에서의 this를 사용할려면
외부클래스.this

18.중첩클래스의 객체생성
외부클래스.내부클래스 변수= 외부클래스의객체변수.new내부클래스생성자()
외부클래스.정적멤버클래스 변수 =new외부클래스.정적멤버클래스클래스

19.익명클래스
한번만 사용하는 클래스로 굳이 이름을 안붙여도 되나
생성자는 클래스의 이름을 사용하기 때문에, 부모클래스 이름으로
생성자의 이름을 대신하고 본체를 구현하는 익명클래스

Parent p = new Parent(){
//상속받은 자식 클래스의 구현할 내용을 쓴다.
};

profile
좋은개발자가 되기위한 삽질기록 노트

0개의 댓글

관련 채용 정보