오버라이딩 Overriding

박성현·2024년 3월 21일

java

목록 보기
34/51

오버라이딩에 대해 알아보자 !!

오버라이딩

  • 상속관계에서 부모 클래스의 메서드를 자식 클래스에서 다시 정의하는 것
  • 자식 클래스 인스턴스에서는 재정이된 매서드가 호출됨
  • 다형성에서도 참조된 참조변수에서도 재정의된 자식 메서드 호출됨

Animal.java

package inheritancepkg;

// 최상위 Object로 부터 상속받음
public class Animal extends Object{
	
	private String name;
	private int age;
	
	public Animal() {
		// TODO Auto-generated constructor stub
	}
	public Animal(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}
	
	public void eat() {
		System.out.println("Eat!!");
	}
	public void move() {
		System.out.println("Move!!");
	}
	public void sleep() {
		System.out.println("Sleep!!");
	}
	
	// private가 있으면 get, set을 해야함
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	
	
}

cat.java

package inheritancepkg;

public class Cat extends Animal {
	
	public Cat(String name, int age) {
		super(name, age);
	}

	// 부모에도 move() 있는데 자식에서 재정의해서 오버라이딩해서 사용할 수 있음
	@Override
	public void move() {
		System.out.println("Move with legs!");
	}
	
}

Eagle.java

package inheritancepkg;

public class Eagle extends Animal {
	public Eagle(String name, int age) {
		super(name,age);
	}

	@Override
	public void move() {
		System.out.println("Move with wings!!");
	}
	
}

AnimalMain.java

package inheritancepkg;

public class AnimalMain {

	static void dogNamePrint(Dog dogs[]) {
		//향상된 for문 / Dog타입을 넣어줬기 때문에 Dog가 나온다
		// dog에 dogs의 값을 하나 씩 넣어줌
		for(Dog dog :dogs) {
			String name = dog.getName();
			System.out.println(name);
		}
	}
	
	public static void main(String[] args) {
		Dog dog1 = new Dog("방글이",2);
		Dog dog2 = new Dog("똥글이",2);
		Dog dog3 = new Dog("호올스",2);
		Dog dogs[] = new Dog[3];
		dogs = new Dog[3];
		dogs[0]=dog1;
		dogs[1]=dog2;
		dogs[2]=dog3;
		
		Cat cat1 = new Cat("나비",0);
		Eagle eagle1 = new Eagle("독수리1", 10);
		
		dog1.move();
		cat1.move();
		eagle1.move();
		
	}

}

결과값 :

결과에서 보면 알 수 있듯 각 클래스에서 다시 move()로 재정의 하면 자식에 있는 move()가 오버라이딩되어 재정의 되는 것을 확인할 수 있다.


profile
개발기록장

0개의 댓글