Inheritance 클래스 상속

박성현·2024년 3월 21일

java

목록 보기
35/51

클래스 상속

Inheritance (상속)

  • 클래스의 수직 구조 설계
  • extends 예약어 사용
  • 부모 클래스를 자식 클래스가 상속받으면 부모 클래스의 변수와 메서드가 상속됨(재사용)
  • 부모 클래스의 변수와 메서드를 자신의 것처럼 사용가능
  • 부모클래스로 은닉될 수 있음 (다형성)
  • 자바에서는 다중 상속 불가
  • 부모클래스는 super, 상위, 베이스 클래스라고도 부름
  • 모든 클래스는 최상위 Object 클래스 상속 받았음

상속하는 예제를 보자 ! !

부모 생성

package inheritancepkg;

// 최상위 Object로 부터 상속받음
public class Animal extends Object{
	
	String name;
	int age;
	
	public void eat() {
		System.out.println("Eat!!");
	}
	public void move() {
		System.out.println("Move!!");
	}
	public void sleep() {
		System.out.println("Sleep!!");
	}
}

자식 클래스

package inheritancepkg;

public class Dog extends Animal {
	
}

자식 클래스 사용

package inheritancepkg;

public class AnimalMain {

	public static void main(String[] args) {
		Dog dog = new Dog();
		
		dog.name = "댕댕이";
		dog.age = 3;
		dog.eat();
		dog.move();
		dog.sleep();
	}

}

에서 보면 알 수 있듯이 Animal extends Object로 Object에서 상속받고 Dog extends Animal에서 Animal에서 상속받고 사용부분인 AnimalMain부분에서 실행을해보면 아무거도 작성하지 않은 Dog라는 자식클래스에서 상속받은 Animal 클래스를 사용할 수 있는 것을 알 수 있다.


super, super()

  • 부모 인스턴스 : 자식 클래스에서 super.변수 접근가능
  • super() : 상속 받은 부모의 인스턴스 생성자
  • 상속받은 자식클래스 인스턴스 생성시 부모 클래스가 먼저 생성되어야함
  • 부모와 자식 클래스 모두 기본 생성자만 있으면 모두 생략가능
  • 부모의 클래스에 오버로딩된 생성자가 있다면 자식 클래스에서 super()로 먼저 호출해줘야 함

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;
		
		dogNamePrint(dogs);
		
	}

}

dog.java

package inheritancepkg;

public class Dog extends Animal {
	public Dog() {
//		super("방글이", 3); super를 아래의 this를 사용할 수 도 있다.
		this("방글이", 3);
	}
	
	public Dog(String name, int age) {
		super(name, age);
	}
}

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;
	}
	
	
}

결과값 :


profile
개발기록장

0개의 댓글