다잘하고싶어

자바 동적바인딩 , 추상클래스 보충설명, 인터페이스 보충설명 본문

이론학습/JAVA

자바 동적바인딩 , 추상클래스 보충설명, 인터페이스 보충설명

챙영잉 2023. 2. 13. 16:45

동적바인딩이란?

가장 최근에 오버라이드 된 메서드를 사용하는 것

부모클래스에 있는 메서드 굳이 써야하나? 어차피 자식걸로 쓸텐데?

 

부모클래스에서 해당 메서드를 지워버리면 동적바인딩이라고 하는 성질때문에 사용할 수 없다.

즉, 오버라이딩 안됨. 컴파일러가 인식하지 못하기 때문에 자식에 있더라도 사용을 못하게 되는 것!

 

자식에 있던 걸 사용하고 싶다면?

형변환을 해준다

KFoodChef 또는 JFoodChef 로

 

 

17번라인 왜 에러뜰까?

 

→  chef.cook() 을 먼저 실행한 후에 반환값을 형변환하는 순서이기때문에

 

에러해결

⇒ cook() 메서드는 자손클래스에서 반드시 재정의해서 사용되기 때문에 조상의 구현이 무의미함

→ 메서드의 선언부만 남기고 구현부는 ;(세미콜론)으로 대체

→ 구현부가 없으므로 abstract 키워드를 메서드 선언부에 추가

→ abstract 메서드를 가진 클래스는 인스턴스를 생성하면 안된다 ( 미완성된 클래스이다 )

→ 객체를 생성할 수 없는 클래스라는 뜻으로 클래스 앞에도 abstract 키워드를 붙여준다

 

public abstract class Chef {
	String name;
	int age;
	String speciality;
	
	public void eat() {
		System.out.println("음식을 먹는다");
	}
	
	public abstract void cook();

}

 

 

 

 

추상클래스의 특징

⇒ 상속전용의 클래스이다 → 인스턴스 생성 불가

⇒ 클래스에 구현부가 없는 메서드가 있으므로 객체를 생성할 수 없음

⇒ 상위클래스 타입으로 자식을 참조할 수는 있음(다형성의 특징)

 

 

 

추상메서드를 활용하면 좋은점

⇒ 부모가 구현하고 싶은 내용이 없다고해서 구현 자체를 안하면, 동적바인딩을 활용할 수 없게된다.

⇒ 빈 깡통으로 만들어놓으면(…( ){ }문제는 없다), 자식이 구현하는 것을 강제할 수 없다.

⇒ abstract 으로 만든다면, 자식클래스는 무조건 구현해야하는 의무를 가진다

.추상클래스는 미완성의 설계도 이므로 인스턴스 생성 안됨. 자식클래스로 생성할 수는 있다.

미완성인 부분을 만들어주면 되지 않을까?

→ 익명클래스라는 문법으로 1회한정으로 구현하고 인스턴스를 만들 수 있게 해준다.

 

Chef c2 = new Chef() {
			@Override
			public void cook() {
				System.out.println("랜덤 요리를 하겠다.");
			}
		};
		
		c2.cook();

인터페이스

→ 추상클래스보다 조금 더 나아간 개념

→ 모든 메서드가 추상메소드

클래스파일과 인터페이스파일 모두 자바파일

구현부가 없다는 의미로 ; 붙여준다

인터페이스가 다중상속이 가능한 이유? 둘 다 구현부가 없으므로!

 

ex. 거미.점프 & 인간.점프

어차피 스파이더맨이 점프를 구현해야한다.

 

 

Instanceof()

'이론학습 > JAVA' 카테고리의 다른 글

자바 예외처리  (0) 2023.02.16
자바 컬렉션  (0) 2023.02.13
자바 인터페이스  (0) 2023.02.06
자바 추상클래스  (0) 2023.02.06
반복문 _ 다양한 형태로 별, 숫자 출력하기  (0) 2023.02.06