classPoint3DextendsPoint { int z; Point3D(int x, int y, int z) { this.x = x; this.y = y; this.z = z; } String getLocation() { return"x:"+x+"y:"+y+"z:"+z; } }
컴파일 에러 발생, Point3D 생성자 첫줄에 super() 넣어짐 Point 클래스 정의에 기본 생성자가 없어 에러 발생
12. 패키지 (package)
서로 관련된 클래스의 묶음
.class
실제 이름(Full name) -> java.lang.String
rt.jar 에 압축된 파일, JDK 설치경로\jre\lib에 위치 (Java 8 까지)
Java9 부터는 rt.jar 없어짐, 모듈 개념이 생겨서 더 작은 단위로 쪼갬
package 선언 없으면 default package에 들어가게 됨
14. 클래스 패스 (classpath)
클래스 파일의 위치를 알려주는 경로
환경변수 classpath로 관리, 경로간의 구분자는 ; 를 사용
15. import 문
java.lang 패키지의 클래스는 import 하지 않고도 사용 할숭 ㅣㅆ다.
String, Object, System, Thread…
import 패키지명.클래스명; 또는 import 패키지명.*;
16. static import 문
static 멤버를 사용 할때 클래스 이름 생략 가능
1 2 3
importstatic java.lang.Integer.*; // 클래스의 모든 static 메서드 importstatic java.lang.Math.random; // Math 클래스의 random()만 importstatic java.lang.System.out; // System.out을 out 만으로 참조가능
17. 제어자 (modifier)
접근 제어자 public, protected, default, private
그외 static, final, abstract, native, transient, synchronized, volatile, strictfp
20. abstract - 추상의, 미완성의
클래스 : 추상 메서드가 선언되어 있음을 의미한다.
메서드 선언부만 작성하고 구현부는 작성 하지 않은 추상 메서드임을 알린다. 추상 클래스의 인스턴스 생성 불가
1 2 3
abstractclassAbstractTest { abstractvoidmove(); }
21. 접근 제어자
private 같은 클래스내에서만
default 같은 패키지내에서만
protected 같은 패키지내, 다른 패키지의 자손
public 접근 제한 없음
22. 캡슐화와 접근 제어자
접근 제어자를 사용하는 이유
외부로부터 데이터를 보호 하기 위해서
23. 다형성 (polymorphism)
여러가지 형태를 가질수 있는 능력
조상 타입 참조 변수로 자손 타입 객체를 다루는 것
‘Tv t = new SmartTV();’ 타입 불일치 하지만 다룰수 있는 것
24. 참조 변수의 형 변환
사용 할수 있는 멤버의 갯수를 조절 하는 것
조상 자손 관계의 참조 변수는 서로 형변환 가능
상속 관계가 아닌 클래스 간의 형 변환 불가
조상의 객체를 자식의 참조변수 대입 할때 명시적 형변환 하면 컴파일 에러는 안 생기시지만 런타임에서 형변환 실행 에러 가 발생 함. java.lang.ClassCastException
26. instanceof 연산자
참조 변수의 형변환 가능여부 확인에 사용, 가능하면 true 반환
형변환 전에 반드시 instanceof로 확인해야 함
1 2 3 4 5 6 7
voiddoWork(Car c) { if (c instanceof FireEngine) { FireEnginefe= (FireEngine) c; fe.water(); ... } }
다형성 정리
조상 = 자손 (예: Tv t = new SmartTV();)
참조 변수의 형변환 - 리모콘 바꾸기, 사용 가능한 멤버 갯수 조절
instanceof 연산자 - 형변환 가능 여부 확인
27. 매개변수의 다형성
참조형 매개변수는 메서드 호출시, 자신과 같은 타입 또는 자손 타입의 인스턴스를 넘겨 줄수 있다.
classExample { publicstaticvoidmain(String[] args) { Outer2oc=newOuter2(); // 외부 클래스의 인스턴스 생성 해야 Outer2.InstanceInnerii= oc.newInstanceInner(); // 내부 클래스 생성 가능