본문 바로가기
개발 이론/Java

Java 기본 헷갈리는 문법(3)

by dal_been 2023. 3. 23.
728x90
다형성

-참조변수가 사용할 수 있는 멤버의 갯수는 인스턴스의 멤버갯수보다 같거나 적어야한다.

 

-참조변수의 형변화 ---> 참조하고 있는 인스턴스에서 사용할 수 있는 멤버의 범위(개수) 조절

		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