Language, SDK/JAVA
[JAVA] 상속
nineil912
2021. 2. 26. 17:44
자식클래스 extends 부모클래스
"extends"라는 키워드를 사용해 상속함.
예시
public class Animal {
String name;
public void setName(String name) {
this.name = name;
}
}
public class Dog extends Animal {
public void sleep() {
System.out.println(this.name+" zzz");
}
public static void main(String[] args) {
Dog dog = new Dog();
dog.setName("poppy");
System.out.println(dog.name);
dog.sleep();
}
}
자식 클래스는 부모 클래스의 기능을 더하여 더 많은 기능을 갖도록 설계한다.
매커니즘을 보면 다음과 같다.
new 생성자로 dog라는 클래스가 생성된다.
this 연산자로 name 인스턴스를 불러오는 setName 메소드가 실행되어 name은 poppy가 되게 된다.
***point setName메소드가 부모 클래스에 있기에 상속받은 Dog 클래스에서 사용이 가능하다.
name인 poppy를 출력하고
dog.sleep()라는 메소드를 호출하여 poppy zzz가 출력되게끔 한다.
메소드 재정의 : 본 클래스에 메소드를 적합하게 사용하도록 바꿈. 부모 클래스의 메소드가 자식 클래스에 맞지 않게 설계되어있을때 일부 수정해서 사용할때 이용함.
부모
public classs Calculator {
double areaCircle(double r){
System.out.println("Calculator 객체의 areaCircle() 실행");
return 3.14 * r * r;
}
}
자식
public class Computer extends Calculator{
@Override
double areaCircle(double r){
System.out.println("Computer 객체의 areaCircle() 실행");
return Math.PI * r * r;
}
}
자식클래스에서는 PI 값을 3.14로 쓰는것이 아닌 Math 클래스를 불러와 PI 상수를 이용하게함. Math는 자바 표준 API라 불로올 수 있음
+) @Override는 메소드가 정확히 재정이된것인지 컴파일러가 확인함
오버라이드로서 다형성 파트에서 자세히 다룰텐데 자식클래스에서만 메소드 기능을 할 수 있도록 재정의 한다 함. 부모 클래스에 있는 메소드를 덮고 자식 클래스에서 정의한 것으로 대체함.
final 클래스와 메소드는 상속과 재정의가 불가능하다.
public final class Member{
}
public final void set(){
System.out.println("얍");
}
다음과 같이 작성. 상속이나 재정의가 불가능함.