728x90
Chapter 4 자바가 확장한 객체 지향
4.1 abstract 키워드 - 추상 메서드와 추상 클래스
- 추상 메서드: 선언부는 있는데 구현부가 없는 메서드
- 추상 클래스는 객체를 만들 수 없다.
- 추상메서드는 하위 클래스에게 메서드 구현을 강제한다. 오버라이딩 강제.
- 추상메서드를 포함하는 클래스는 반드시 추상 클래스여야한다.
4.2 생성자
package constructor01;
public class 동물 {
}
- 위와 같이 생성자를 생성하지 않아도 기본생성자를 만들어 준다.
package constructor03;
public class 동물 {
public 동물(String name) {
System.out.println(name);
}
}
- 이렇게 인자가 있는 생성자 하나라도 만들면 자바는 기본 생성자를 만들어 주지 않는다.
4.3 클래스 생성 시의 실행 블록, static 블록
package staticBlock;
public class 동물 {
static {
System.out.println("동물 클래스 레디 온!");
}
}
- 동물에 대한 인스턴스를 만들어야만 static 블록이 실행된다.
- 인스턴수 여러개를 만들어도 static block은 한번만 실행이 된다.
- 클래스 정보는 해당 클래스가 코드에서 맨 처음 사용될 때 T 메모리의 스태틱 영역에 로딩되며 이때 단 한번 해당 클래스의 static 블록이 실행된다
- 클래스가 제일처음 사용할 때는 클래스의 정적 속성을 사용할 때, 클래스의 정적 메서드를 사용할때, **클래스의 인스턴스를 최초로 만들 Eo
4.4 final 키워드
- final과 클래스 : 상속을 허락하지 않아 하위 클래스를 만들 수 없다.
- final과 변수 : 정적 생성자에 해당하는 static 블록 내부에서 초기화가 가능하다.
- final과 메서드 : 오버라이딩을 금지한다.
4.5 instanceof 연산자
- instanceof 연산자는 만들어진 객체가 특정 클래스의 인스턴스 인지 물어보는 연산자이다.
package instanceOf01;
class 동물 {
}
class 조류 extends 동물 {
}
class 펭귄 extends 조류 {
}
public class Driver {
public static void main(String\[\] args) {
동물 동물객체 = new 동물();
조류 조류객체 = new 조류();
펭귄 펭귄객체 = new 펭귄();
System.out.println(동물객체 instanceof 동물);
System.out.println(조류객체 instanceof 동물);
System.out.println(조류객체 instanceof 조류);
System.out.println(펭귄객체 instanceof 동물);
System.out.println(펭귄객체 instanceof 조류);
System.out.println(펭귄객체 instanceof 펭귄);
System.out.println(펭귄객체 instanceof Object);
}
}
- 결과는 모두 true이다.
package instanceOf02;
class 동물 {
}
class 조류 extends 동물 {
}
class 펭귄 extends 조류 {
}
public class Driver {
public static void main(String[] args) {
동물 동물객체 = new 동물();
동물 조류객체 = new 조류();
동물 펭귄객체 = new 펭귄();
System.out.println(동물객체 instanceof 동물);
System.out.println(조류객체 instanceof 동물);
System.out.println(조류객체 instanceof 조류);
System.out.println(펭귄객체 instanceof 동물);
System.out.println(펭귄객체 instanceof 조류);
System.out.println(펭귄객체 instanceof 펭귄);
System.out.println(펭귄객체 instanceof Object);
}
}
- 객체 참조 변수의 타입이 아닌 실제 객체의 타이에 의해 처리되기 때문에 동물 객체더라도 instanceof 조류 도 true가 된다.
- instanceof는 클래스 상속관게 뿐만아니라 인터페이스 구현 관계에서도 동일하게 적용이된다.
4.6 package 키워드
- 고객사업부.Customer 와 마케팅사업부.Customer는 같은 Customer 클래스이지만 다른 패키지 이다.
- 소유자가 패키지라고 보면된다.
4.7 interface 키워드와 implements 키워드
- 인터페이스는 public 추상메서드와 public 정적 상수만 가질 수 있다.
- 이때 static과 final을 붙이지 않아도 자동으로 자바가 알아서 붙여준다.
- 자바 8 부터는 인터페이스에 디폴트 메서드가 존재한다.
4.8 this 키워드
package This;
class 펭귄 {
int var = 10;
void test() {
int var = 20;
System.out.println(var);
System.out.println(this.var);
}
}
public class Driver {
public static void main(String[] args) {
펭귄 뽀로로 = new 펭귄();
뽀로로.test();
}
}
- 지역 변수 속성(객체 변수, 정적 변수)의 이름이 같은 경우 지역 변수가 우선한다.
- 객체 변수와 이름이 같은 지역 변수가 있는 경우 객체 변수를 사용하려면 this를 접두사로 사용한다.
- 정적 변수와 이름이 같은 지역 변수가 있는 경우 정적변수를 사용하려면 클래스명을 접두사를 사용한다.
4.9 super 키워드
package Super;
class 동물 {
void method() {
System.out.println("동물");
}
}
class 조류 extends 동물 {
void method() {
super.method();
System.out.println("조류");
}
}
class 펭귄 extends 조류 {
void method() {
super.method();
System.out.println("펭귄");
// Syntax error on token "super", Identifier expected
// super.super.method();
}
}
public class Driver {
public static void main(String[] args) {
펭귄 뽀로로 = new 펭귄();
뽀로로.method();
}
}
- 바로 위 상위 클래스의 인스턴스를 지칭하는 키워드이다.
'공부 > JAVA객체지향' 카테고리의 다른 글
객체지향 설계 5원칙 (0) | 2021.04.29 |
---|---|
자바와 객체 지향 (0) | 2021.04.22 |
자바와 절차적/구조적 프로그래밍 (0) | 2021.04.22 |