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()가 오버라이딩되어 재정의 되는 것을 확인할 수 있다.