다형성
-참조변수가 사용할 수 있는 멤버의 갯수는 인스턴스의 멤버갯수보다 같거나 적어야한다.
-참조변수의 형변화 ---> 참조하고 있는 인스턴스에서 사용할 수 있는 멤버의 범위(개수) 조절
Car car = null;
FireEngine fe = new FireEngine();
FireEngine fe2= null;
car=fe; //업캐스팅
fe2=(FireEngine)car; //형변환 생략불가, 다운캐스팅
-참조변수와 인스턴스 연결
--> 멤버변수가 조상클래스와 자손클래스에 중복정의된 경우, 조상타입의 참조변수를 사용했을때는 조상클래스의
멤버변수 이용 / 자손타입의 참조변수 사용했을 때는 자손클래스의 멤버변수 이용
---> 메서드는 인스턴스타입에 따라
추상클래스
-추상메서드 + 생성자 + 멤버변수 + 메서드
-인스턴스 생성 불가
인터페이스
- 추상메서드(o) -> public abstract
- 일반메서드, 멤버변수(X)
-상수만 (o) -> 모든 멤버변수는 public static final
-리턴타입이 인터페이스라는 것은 메서드가 해당 인터페이스를 구현한 클래스의 인스턴스를 반환
-디폴트 메서드와 static 메서드
class Child extends Parent implements Myinterface1,Myinterface2{
public void method1() {System.out.println("Child");}
}
class Parent{
public void method2() {System.out.println("Parent");}
}
Interface Myinterface1{
default void method1() {System.out.println("Interface");}
static void staticMethod() {System.out.println("static interface");}
}
Child c= new Child();
c.method1(); //Child
c.method2(); //Parent
Myinterface1.staticMethod(); //static interface
지네릭 제한
-static 멤버에 타입변수 T(인스턴스멤버로 간주 ) 사용불가 => 대입된 타입의 종류와 관계없이 동일한 것이어야 하기 때문
Box<T>{
static T item; //에러
static int compare(T t1, T t2) {} //에러
}
-지네릭타입의 배열생성 불가
Box<T>{
T[] itmeArr; //선언 가능
T[] toArray() {
T[] tmpArr = new T[itemArr.lenth];
}
}
new는 컴파일 시점에 타입 T가 어떤 타입인지 정확히 알아야함
---> 해결방법
1)'Reflection API'의 newInstance() 이용
2)Object 배열 생성후 T[]로 형변환
'개발 이론 > Java' 카테고리의 다른 글
Java 기본 헷갈리는 문법(2) (0) | 2023.03.22 |
---|---|
Java 기본 헷갈리는 문법(1) (0) | 2023.03.22 |