오버라이딩
•
자식클래스에서 재정의해서 사용한다.
•
메소드 오버라이딩을 사용하면, 부모 메소드 대신 자식 메소드가 사용된다.
final
•
클래스에 final을 붙이면 상속할 수 없는 클래스가 된다.
•
final 메소드는 오버라이딩 할 수 없다. → 그대로 쓸 수밖에 없다.
타입 변환
•
클래스도 타입 변환이 있는데, 클래스의 타입 변환은 상속 관계에 있는 클래스 사이에서 발생한다.
•
자동 타입 변환(Promotion)
◦
자식은 부모의 특징과 기능을 상속받기에 부모와 동일하게 취급할 수 있다.
◦
부모 타입으로 변환한 경우에는 부모 클래스에 선언된 필드와 메소드만 접근할 수 있게 된다.
◦
자식 클래스에서 오버라이딩 된 메소드가 있다면, 오버라이딩된 메소드가 호출된다.
Parents p = new Child();
Java
복사
•
강제 타입 변환(Casting)
◦
자식 타입은 부모 타입으로 자동 변환되지만, 반대로 부모 타입은 자식 타입으로 자동 변환되지 않는다.
◦
부모 타입 객체를 자식 타입으로 무조건 강제 변환할 수는 없다.
◦
자식 객체가 부모 타입으로 자동 변환된 경우에만 강제 타입 변환을 사용할 수 있다.
Parents p = new Child(); //
Child c = (Child) p;
Java
복사
다형성
•
다형성은 상속(타입 변환)을 전제로, 하나의 객체 타입이 여러 타입을 참조할 수 있는 능력을 의미한다.
•
동일한 사용방법이지만 다양한 실행 결과를 나타나게 할 수 있다.
instanceof
•
변수가 참조하는 객체의 타입을 확인하고자 할 때, instanceof 연산자를 이용할 수 있다.
•
instanceof 연산자의 좌측에는 객체, 우측에는 타입을 기술하면 해당 객체와 타입이 일치하는지 여부를 boolean으로 반환한다.
boolean result = instance instanceof Type;
Java
복사
•
Java 12부터는 instanceof 연산의 결과가 true일 경우, 우측타입의 변수를 사용할 수있어서 강제타입 변환을 할 필요가 없다.
Object 클래스
•
Object 클래스는 Java에서 최상위 클래스이다.
•
즉, Java의 모든 클래스는 Object의 자식이거나 자손 클래스가 된다.
•
클래스를 생성할 때 명시적으로 extend를 작성하지 않은 경우, 자동으로 Object를 상속받게 된다.
•
Object 클래스는 다양한 메소드들로 구성되어 있고, 해당 메소드들은 모든 클래스에서 이용할 수 있다.
추상 클래스
•
사전적 의미의 추상은 실체 간의 공통되는 특성을 추출한 것을 말한다.
•
추상 클래스는 실체 클래스의 부모 역할을 한다.
•
추상 메소드
◦
자식 클래스들이 가지고 있는 공통 메소드를 뽑아내어 추상 클래스로 만들 때, 실행 내용이 자식마다 달라지는 경우가 발생할 수 있다.
◦
추상 메소드는 abstract 키워드가 붙고, 메소드 실행 내용이 없는 것이 특징이다.
abstract 리턴타입 메소드명();
Java
복사
package com.oop.abstract1;
public abstract class Animal {
abstract void sound();
}
Java
복사
인터페이스
•
참고링크:
•
다형성 구현에 주로 사용된다.
•
상속을 통해 다형성을 구현할 수 있지만, 인터페이스를 통해 구현하는 경우가 더 많다.
•
인터페이스는 public static final 특성을 갖는 불변의 상수 필드만을 가질 수 있다.
package com.oop.interface1
public interface RemoteControl {
// 공용 정적 상수 필드
public static final int MAX_VOLUME = 10;
int MIN_VOLUME = 0;
// public 추상 메소드
/* public * /void turnOn();
}
}
Java
복사