지식공부

다형성예제 (remind)

동곤일상 2025. 7. 14. 22:43
반응형

다형성에 대한 개념이 가물가물해서 코드로 적어보려한다

 

 

최고부모 (Car)

package poly.car;

public class Car {
    protected String name;
    protected String color;
    protected int speed;

    public Car(String name, String color, int speed) {
        this.name = name;
        this.color = color;
        this.speed = speed;
    }

    public void move(){
        System.out.println(name+"("+color+")의 속도 : "+speed);
    }
    
    public void superMethod(){
        System.out.println("부모의메서드");
    }
}

하위에 2개의 객체를 생성할건데

딴건 모르겠고

생성자는 필수로 오버라이딩을 해줘야함

매개변수가없는 생성자라면 필수가 아님

 

 

Car클래스를 상속받은 Avante 클래스

package poly.car;

public class Avante  extends Car{


    public Avante(String name, String color, int speed) {
        super(name, color, speed);
    }

    @Override
    public void move() {
        System.out.println(super.name+"는" + super.color+"색 입니다");
    }
    public void ChildrenMethod(){
        System.out.println("자식아반떼의메소드");
    }
}

일단 생성자를 필수로 오버라이딩해 (매개변수3개)

또한 필드는 오버라이딩이없지만 자동으로  부모의필드,메서드를 모두 가지고있게됨

 

move메서드(부모메서드)의 오버라이딩

super.move() 를 사용한다면 부모의 메서드형식을 따르지만

다음과 같이 이 클래스만의 내용으로 바꿀수가있음

 

또한 이 클래스는 자신만의 ChildrenMethod를 생성해봤다

(이건 부모는 절대로알수가없는 메서드임) 

자식 -> 부모메서드 (알수있음)

부모 -> 자식메서드(알수없음)

 

 

Car를 상속받은 K8 클래스

package poly.car;

public class K8  extends Car{

    public K8(String name, String color, int speed) {
        super(name, color, speed);
    }

    @Override
    public void move(){
        System.out.println(super.name+"는"+super.speed+"로 달려");
    }
  
}

부모의 메서드인 superMethod는 따로 오버라이딩선언을

하지 않았지만  내부적으로 가지고있다.!!!(사용가능)


3개의 클래스를 활용한 예제

package poly.car;

public class Main {
    public static void main(String[] args) {
        Car car = new Car("차","yellow",90);

        //부모타입변수는 자식객체를 참조가능
        Car car2 = new Avante("아반떼","white",70); 
        
        //K8 k8  = new Car(); 자식타입변수는 부모객체를 절대로 참조할수없음
        K8 car3 = new K8("K8","black",120);

        car.move();

        car2.move();
        //car2.childrenMethod(); 
        //부모가 자식을 참조는 가능하지만 자식의메서드는 사용할수없음

        car3.move();
        car3.superMethod(); //오버라이딩하지않아도 부모의메서드 사용가능함

    }
}

차(yellow)의 속도 : 90


아반떼는white색 입니다


K8는120로 달려
부모의메서드

'지식공부' 카테고리의 다른 글

AOP(Aspect-Oriented Programming)  (0) 2025.07.16
기본형 , 참조형에 대해  (0) 2025.07.15
스프링컨테이너 , 커넥션풀에 대해  (0) 2025.07.14
싱글톤패턴과 의존성주입(DI)에 대해  (0) 2025.07.13
스프링에 대해  (1) 2025.07.13