클래스 상속과 객체
extends /// super class, sub class 다중상속 xx최상위 조상 클래스 : java.lang.Object
접근지정
1) private : super 클래스 내에서만 2) default : 패키지내 모든 클래스 3) protected : 같은 패키지 + 다른 패키지여도 상속받은 서브클래서에서 접근 가능4) public : 모든 클래스
생성자 호출
new에 의해 생성 시 서브 클래스 생성자 호출 → 슈퍼클래스 생성자 호출 → 슈퍼클래스 생성자 실행 → 서브클래스 생성자 실행
super() 지정없으면 기본생성자!!
- 반드시 첫 줄에 올 것
업캐스팅
Person → Student 일 때
Stdent s = new Student()
Person p = s ; // 업캐스팅 자동변환
- 슈퍼클래스의 멤버만 접근 가능
다운캐스팅
명시적 타입 변환 필요
Student s = (Student) p;
→ 업캐스팅된 레퍼런스로 객체 타입 판단하기 어렵다.
instanceof : 레퍼런스가 가리키는 객체의 타입 식별
객체레퍼런스 instanceof 클래스타입 → true/false boolean 값 - 객체에 대한 레퍼런스만 사용
메소드 오버라이딩
: 슈퍼클래스의 메소드를 서브클래스에서 재정의 - 슈퍼 클래스 메소드의 이름, 매개변수 타입 및 개수, 리턴 타입 등 모두 동일시 - 메소드 덮어쓰기
→ 동적 바인딩 발생 : 서브 클래스에 오버라이딩된 메소드가 무조건 실행되는 동적바인딩
오버라이딩은 실행시간 다형성을 실현한다.
동적바인딩을 통해 실행 중에 다형성을 실현한다. → 실행할 메소드를 run time에 결정하고, 컴파일 타임
추상메소드/추상클래스
abstract method
- 서브클래스에서 오버라이딩으로 구현
abstract class
1) 추상 메소드를 하나라도 가진 클래스
- 클래스 앞에 반드시!!!! abstract 선언
- 메소드에도 당연히 abstract 선언 되어있겠지.. → 서브클래스에서 정의
2) 추상메소드가 하나도 없지만 abstract 선언된 클래스
- 추상클래스는 객체를 생성할 수 없다.
- but 레퍼런스! 참조변수는 가능
추상클래스 상속
1. 추상 클래스 단순 상속
추상 클래스를 상속받아 추상메소드를 구현하지 않으면 추상 클래스가 됨
→ 서브클래스도 당연히 abstract 선언해야 함
2. 추상 클래스 구현 상속
서브클래스에서 추상 메소드 구현
→ 오버라이딩으로 구현했기에 서브클래스는 추상클래스가 아님!!
인터페이스
: 클래스가 구현해야 할 메소드들이 선언되는 추상형
접근지정자 interface 이름 {...}
- java7 까지는 상수와 추상메소드로만 구성
- java8부터 상수와 추상메소드 + default/private/static 메소드 포함
인터페이스에는 필드(멤버변수) 선언불가
interface II {
public static final int TIMEOUT = 10000; //어차피 상수이기에 final까지 생략가능
public abstract void methoda(); //추상메소드 abstract까지 생략가능
publc abstract void methodb(); //
public abstract default void methodc(){ //접근지정자가 아니라!! 인터페이스로서 default method
System.out.print("dd");
};
}
디폴트 메소드
추상메소드 취급 → 오버라이딩 가능하지만 하지않는다면 원래 있던 코드 사용!
구성요소
상수 - public만 허용, public static final 생략
추상 메소드 - public abstract 생략
디폴트 메소드 - public 만 허용
private 메소드 - 인터페이스 내에 코드가 작성될 것!! private이므로 인터페이스 내 다른 메소드에 의해 호출 가능
static 메소드 - public private 모두 지정 가능 . 생략하면 public
protected 선언불가
객체 생성은 불가하지만 레퍼런스 참조변수는 가능!!
인터페이스 상속 서브클래스는 인터페이스의 모든 추상 메소드 반드시 구현해야 함 → 오버라이딩 강제 (툴)
implements
- 추상메소드를 모두 구현한 클래스 작성 + 추가 메소드 작성 가능
- 여러 인터페이스 다중상속 가능
extends
인터페이스가 다른 인터페이스를 상속
'Major S-T-U-D-Y' 카테고리의 다른 글
[JAVA] 4. class (0) | 2024.10.14 |
---|