JAVA_Extends

뚱이아저씨·2023년 3월 6일
0

자바

목록 보기
10/15
post-thumbnail
post-custom-banner

상속(Extends)

상속이란

  • 자식 클래스가 부모클래스를 상속(Extends)받아 부모의 멤버를 그대로 사용할 수 있다.
  • 부모클래스와 자식클래스로 나뉘며 자식클래스는 부모 클래스를 선택할 수 있다.
  • 부모가 가지고 있는 기능을 상속 받아 overide를 원래 자식 클래스가 가지고 있던 기능까지 같이 사용할 수 있다.

상속 사용 출력 예시

//부모 클래스
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();
    }
}

상속과 생성자의 관계

  • 부모 클래스 생성자에 매개 변수가 있으면 자식 클래스생성자에게도 똑같은 매개변수를 추가해줘야 한다.
  • Main메소드에서 객체 생성시 자식 클래스에 있는 생성자 매개변수를 작성해줘야 한다.

상속과 생성자의 관계 출력 예시

//부모 클래스
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());
    }
}

오버라이딩(Override)

  • 부모 클래스에서 자식 클래스 상속할때 같은 이름의 메소드를 자식 클래스에 맞게 재정의하여 사용하는 것을 의미 한다.

오버로딩(Oberload)

  • 메소드의 이름은 같고 매개변수의 유형과 개수가 다르도록 여러번 선언하는 것을 의미 한다.

오버라이딩 출력 예시

//부모 클래스
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);
	}
}
profile
뚱이아빠의 개발자도전기
post-custom-banner

0개의 댓글