코드일기장

[Java] 단일상속, 오버라이딩 (객체지향2-2) 본문

Java/OOP

[Java] 단일상속, 오버라이딩 (객체지향2-2)

won_hyeok2 2022. 1. 26. 15:00

 


🎈단일상속

 

Java는 단일상속만 허용한다. (C++은 다중상속 허용)

 

class Child extends Parent1,Parent2{
	// error 상속은 단 하나의 클래스에게만 받을 수 있다.
}

 

Java를 다중상속처럼 사용할 수도 있다.

인터페이스를 사용하는 방법과,

비중이 큰 클래스는 상속, 비중이 적은 클래스는 포함관계를 사용하면 된다.

 

🔑 예시 코드

더보기
public class inheritance {

	public static void main(String[] args) {
		Child c1 = new Child();
		c1.age = 1000;
		System.out.println(c1.age + " " + c1.p2.name);
		Child c2 = new Child(new Parent2("kwh"));
		c2.age = 21;
		System.out.println(c2.age + " " + c2.p2.name);
	}

}

class Child extends Parent1 { // 비중이 많다는 가정하에 상속관계
	Parent2 p2; // 비중이 적다고 가정하에 포함관계

	Child(Parent2 p2) {
		this.p2 = p2;
	}

	Child() {
		this(new Parent2("DINO"));
	}

}

class Parent1 {
	int age;

}

class Parent2 {
	String name;

	public Parent2(String name) {
		this.name = name;
	}
}

 

1000 DINO
21 kwh

🎈Object 클래스의 상속

 

부모가 없는 클래스는 자동적으로 Object클래스에게 상속받는다.

모든 클래스는 Object클래스의 자손이기 때문에 Object클래스의 11개의 메서드를 상속받는다. (11개의 메서드 관련 글 https://javaone.tistory.com/69)


🎈오버라이딩

 

상속받은 조상의 메서드를 자신에게 맞게 변경하는 것 = 오버라이딩

 

 

class Animal {
	String animal_name;

	String strMethod(String name) {
		return this.animal_name = name;
	}
}

class Pet extends Animal {
	String pet_name;

	String strMethod(String name) { //overriding
		return this.pet_name = name + " " + this.animal_name;
	}
}

 

위 코드를 보면 Pet 클래스에서 Animal 클래스의 멤버인 strMethod를 사용한 것을 볼 수 있다.

저것처럼 상속받은 메서드를 똑같이 사용하고 구현부{} 부분만 수정하면 오버라이딩이다.

 

오버라이딩은 선언부는 반드시 같아야 한다. (이름, 매개변수, 리턴 타입)

 

다시 정리하면

 

오버라이딩의 조건

1. 선언부가 같아야 한다. (이름, 매개변수, 리턴 타입)

2. 접근제어자를 좁은 범위로 변경할 수 없다.

   ex) 조상이 protected라면, 범위가 더 넓은 public으로 변경할 수 없다는 것이다.

3. 조상 클래스의 메서드보다 많은 수의 예외를 선언할 수 없다.

 

 


 

오버라이딩과 오버로딩

 

오버로딩 (overloading): 기존에 없던 메서드를 정의하는 것 

오버라이딩(overriding): 상속받은 메서드의 내용을 변경하는 것

 

 

class OverP{
	void overMethod() {}
}

class Over extends OverP{
	void overMethod() {System.out.println()} //오버라이딩
	void overMethod(float f) {}//오버로딩
	
	void c_over() {}
	void c_over() {System.out.println()}//error 중복정의 상속받은 맴버중에 없는 메서드임
	void c_over(char[] c) {} //오버로딩
}

 

 

 

 

 

🎈 다음 글 보기 (객체지향 2-3)



 

 

 

🎈 이전 글 보기 (객체지향2-1)



 

 

Comments