반응형
다형성에 대한 개념이 가물가물해서 코드로 적어보려한다
최고부모 (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 |