상속
상속이란 새로운 클래스를 생성할 때 이미 생성된 기존의 클래스로부터 상속받아 속성과, 기능을 확장하는 것을 의미한다.
상속을 하는 방법은 기존 class 이름 뒤에 extends를 붙인후 상속할 상위 클래스의 이름을 쓰면 된다. 이때 상위 클래스는 하나만 지정할 수 있다.
Protected
이 때 상위 클래스의 private 변수를 하위 클래스에서 접근하려면 setter를 통해야 하는데 이런 번거로움을 피하기위해 존재하는게 바로 protected 접근 제한자이다. 상위클래스에서 protected 예약어를 통해 선언한 멤버변수는 하위 클래스에서 자유롭게 이용이 가능하다.
Super()
하위 클래스가 생성되는 과정은 상위 클래스를 먼저 생성한 후에 하위 클래스를 생성하게 된다.
따라서 하위 클래스의 생성자에는 무조건 상위 클래스의 생성자를 호출해야한다. 만약 생성하지 않는다면 컴파일 전에 자동으로 생성한다.
super()라는 코드를 통해 상위 클래스를 생성하는데 만약 상위 클래스의 기본 생성자가 없다면 하위클래스에서 명시적으로 상위 클래스의 생성자를 생성해야한다. 예를 들면 상위 클래스에 생성자가 Animal(String, int) 밖에 없다면 하위 클래스 Human()에서 super(String, int)를 실행해줘야 하는 것이다.
업캐스팅
상위 클래스 형으로 변수를 선언하고 이를 하위클래스 인스턴스로 생성할 수 있다. 하위 클래스가 상위 클래스를 내포하고 있으므로 묵시적인 형 변환이 가능해서 아래 사진과 같은 선언이 가능한 것이다. 그러나 그 역은 성립하지 않는다.
Parent p = new Parent(); // 가능
Parent p = new Child(); // 가능
Child c = new Child(); // 가능
Child c = new Parent(); // 불가능
- 상위 클래스의 참조 변수로 인스턴스를 참조하면, 실제로 참조하는 인스턴스의 종류에 상관없이 상위 클래스에 정의된 메소드만 호출이 가능하다.
만약 Parent p = new Child(); 이경우, p가 Parent형 참조변수이고 new Child()가 참조하는 인스턴스이다.
따라서 Child에 어떤 메소드들이 선언되어 있건 상관없이, Parent에 선언된 메소드들만 호출이 가능하다.
메소드 오버라이딩
상위 클래스에서 정의된 메소드가 하위 클래스에서 더 구체적으로 구현하거나 변경이 필요한 경우 오버라이딩 할 수 있다.
@Override라는 어노테이션을 통해 가능한데 메소드 선언부는 상위클래스와 같아야 하고 선언부 윗줄에 @Override를 써주면 된다.
다형성
다형성이란 하나의 코드가 여러 자료형으로 구현되는 것이다. 같은 코드라도 다른 결과가 나오는데 자료형이 다르기 때문이다.
다운캐스팅
다운캐스팅이란 묵시적으로 상위 클래스로 형변환된 인스턴스가 다시 원래 하위 클래스로 변환되는 것을 말한다.
하위 클래스로의 형 변환은 명시적으로 이뤄져야 한다.
Customer c = new VipCustomer(); //묵시적 형변환
VipCustomer vc = (VipCustomer)vcl //명시적 형변환, 다운캐스팅
instanceof
instance의 형을 검사하는 방법이다.
만약 if(A instanceof B) 왼쪽의 변수가 B 클래스 타입이면 true를 반환한다.
parent p = new Parent();
if(p instanceof Child) // false
if(p instanceof Parent) // true
'프로그래밍 > Java' 카테고리의 다른 글
[Java] final 예약어 (0) | 2020.02.03 |
---|---|
[Java] 추상 클래스 (0) | 2020.02.03 |
[Java] 배열과 ArrayList (0) | 2020.02.01 |
[Java] Static과 Singleton Pattern (0) | 2020.01.30 |
[Java] 공부하며 느낀 점 메모 (0) | 2020.01.29 |