상속 사용 출력 예시
//부모 클래스
public class Animal {
public void run() {
System.out.println("달린다.")
}
}
//자식 클래스
public class Lion extends Animal {
public void hunt() {
System.out.println("사자가 사냥을 한다.")
}
}
//아무 기능이 없는 자식 클래스
public class Tiger extends Animal {
//클래스안에 아무런 메소드가 있지 않아도 상속을 받을 수 있다.
}
public class Main{
public static void main(String[] args) {
//객체 생성
Tiger tiger=new Tiger();
Lion lion=new Lion();
//자식클래스만 객체를 생성해도 부모 클래스를 상속 받았기 때문에 부모 클래스에 있는 메소드도 사용하능 하다.
lion.run();
tiger.run();
//자식 클래스는 자신이 원래 가지고 있는 메소드 기능도 같이 사용할 수 있다.
lion.hunt();
}
}
상속과 생성자의 관계 출력 예시
//부모 클래스
public class Animal {
//필드
private String animalName;
//생성자
public Animal(String animalName) {
this.animalName=animalName;
}
//메소드
public String getAnimalName() {
return animalName;
}
}
//자식 클래스
public class Cats extends Animal{
//필드
private int age;
//생성자
//자식클래스 생성자 매개변수 + 부모클래스 생성자 매개변수를 같이 써줘야 오류를 막을 수 있다.
public Cats(int age, String animalName) {
super(animalName);
this.age=age;
}
public int getAge() {
return age;
}
}
//메인 클래스
public class Main {
public static void main(String[] args) {
//Cats class에서 Animal class를 상속 받았고
//Cats class에서 생성자 매개변수에 있는 age, animalName이 있기 때문에
//Cats객체 생성시 매개변수의 값을 넣어줘야 한다.
Cat cats=new Cats(3,"시베리안");
System.out.printf("%s,%d",cats.getAnimalName(), cats.getAge());
}
}
오버라이딩 출력 예시
//부모 클래스
public class Animal {
public void move() {
System.out.println("동물이 움직입니다.")
}
}
//자식 클래스
public class Falcon extends Animal{
@Override
public void move() {
System.out.print("매가 두 날개로 하늘을 납니다.")
}
public void pecAt() {
System.out.println("매가 모이를 쫍니다.")
}
}
public class Lion extends Animal {
@Override
public void move() {System.out.println("사자가 네 발로 움직입니다.");}
public void hunt() {System.out.println("사자가 사냥을 합니다.")}
}
public class Test {
public void moveAnimal(Animal animal) {
animal.move();
}
//메인 메소드
public static void main(String[] args) {
//업캐스팅 자동타입변환
//Lion이 Animal로 바껴서 저장이 된다. 자식 클래스에서 부모 클래스로 업캐스팅 하는 것
Animal lion=new Lion();
Animal falcon=new Falcon();
//원래대로 라면 Animal클래스에 있는 move메소드가 실행되어야하는데
//어떤 경우에서든 Override된것이 먼저 출력이 되고 Animal타입으로 형변환을 했기 때문에
//각 클래스에 있는 move메소드가 실행이 된다.
t.moveAnimal(lion);
t.moveAnimal(falcon);
}
}