본문 바로가기
프로그래밍/Java-문법정리

【OOP】04_상속

by 코이킹 2022. 1. 18.
반응형

안녕하세요 코이킹입니다. 

 

이번 포스트에서는 상속에 대해서 설명하겠습니다. 

 


1. 상속이란? 

 부모클래스의 멤버 변수와 메서드를 자식 클래스에서 상속하여 사용할 수 있게 하는 것을 말합니다.  
 

※ extends키워드를 사용하여 상속할 부모 클래스를 정의하여 상속관계를 설정할 수 있습니다.  

public class 자식클래스 extends 부모 클래스 { 

 

}

 

※ 예제코드 

public class Animal {
	protected String name;
	protected int age;
	
	public Animal() {}

	public Animal(String name, int age) {
		this.name = name;
		this.age = age;
	}

	public void printName() {
		System.out.println(this.name);
	}
	
	public void printAge() {
		System.out.println(this.age);
	}
	
	protected void eat() {
		System.out.println("eat");
	}
	
	protected void sleep() {
		System.out.println("sleep");
	}
}

public class Dog extends Animal {
	
	protected String breed;
	protected String cryingSound = "Wang~!";
	
	public Dog(String name, int age) {
		super(name, age);
	}
	
	public void crying() {
		System.out.println(this.cryingSound);
	}
	
	@Override
	public void printName() {
		System.out.println("Dog's Name : "+ this.name);
	}
	
}

public class Person extends Animal {
	
	public String language;
	
	public Person(String name, int age) {
		super(name, age);
	}
	
	public void speaking() {
		System.out.println("speaking : "+this.language);
	}
	
	@Override
	public void printName() {
		System.out.println("Person's Name : "+ this.name);
	}
	
}


2. 상속가능한 부모 클래스의 요소 

 public·protected·default 로 선언된 멤버 변수와 메서드
 ※ 단, default의 경우 같은 패키지내에서만 사용 가능. 

public static void main(String[] args) {
    Dog dog = new Dog("Happy", 3, "Akita");
    Person person = new Person("David", 20, "English");
		
    // System.out.println(dog.age);   // privateのため、子クラスで使えない。
    System.out.println(dog.name);     // protectedのため、子クラスで使える。
    System.out.println(dog.getAge()); // publicのため、子クラスで使える。
}

 

3. 상속을 사용하는 이유 

 부모클래스에 공통의 속성과 기능을 정의하고, 자식 클래스에서 자식 클래스만의 속성과 기능을 정의 함으로써 손쉽게 코드를 재사용 할 수 있으며, 기능의 확장이 용의 합니다. 
 상속은 위와 같은 장점이 있지만 부모 클래스의 필요 없는 코드까지 상속해야만 하므로 코드가 비대해질 수 있다는 단점이 존재합니다. 
 

// 共通機能を親に定義すると、子クラスでは子クラスなりのコードを実装すればよい。
System.out.println("Dog's Age : "+dog.getAge());
System.out.println("Person's Age : "+person.getAge());
		
// 子クラスなりの機能
dog.crying();
person.speaking();


4. super()

 부모클래스의 요소중 생성자는 상속받을 수 없습니다. 
그렇다면 매개변수가 포함된 생성자가 정의된 부모 클래스를 상속하려면 어떻게 해야 할까요? 
이 경우에는 자식클래스의 생성자에서 super() 메서드를 사용해서 부모의 생성자 중 하나를 호출해주면 됩니다.

 

public Person(String name, int age, String language) {
    super(name, age);    // 親のコンストラクターを呼び出す。
    this.language = language;
}

public Dog(String name, int age, String breed) {
    super(name, age);    // 親のコンストラクターを呼び出す。
    this.breed = breed;
}

 

5. 오버라이드 

오버라이드는 부모클래스의 메서드를 자식 클래스에서 재정의 하는 것으로,

자식 클래스 별로 다르게 메서드를 재정의 하여 같은 메서드를 호출하여 다른 결과를 만들어 낼 수 있습니다

 

※ 이 부분은 다형성을 설명할 때 다시 정리하려 합니다.


public class Person extends Animal {
    ...
	@Override
	public void printName() {
		System.out.println("Person's Name : "+ this.name);
	}
}

public class Dog extends Animal {
    ...
	@Override
	public void printName() {
		System.out.println("Dog's Name : "+ this.name);
	}
}

// override
dog.printName();
person.printName();

※ 예제 코드

https://github.com/leeyoungseung/algorithmBasic/tree/master/algorithm/src/objective/basic04

 

※ qiita에 투고한 URL

https://qiita.com/Koiking-L/items/da5793c1c8e0973e7070

 

 

 

반응형

'프로그래밍 > Java-문법정리' 카테고리의 다른 글

【OOP】06_추상화  (0) 2022.01.23
【OOP】05_다형성  (0) 2022.01.20
【OOP】03_캡슐화  (0) 2022.01.16
【OOP】02_멤버변수·메서드·생성자  (0) 2022.01.15
【OOP】01_객체・클래스・인스턴스  (0) 2022.01.10

댓글