Language/JAVA

[JAVA] 상속

nineil91 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("얍");
    
 }

 

다음과 같이 작성. 상속이나 재정의가 불가능함.

'Language > JAVA' 카테고리의 다른 글

[JAVA] 예외처리  (0) 2021.10.17
[JAVA] 생성자  (0) 2021.02.26
[JAVA] 클래스와 객체  (0) 2021.02.04