본문 바로가기
Java

상속 ( Inheritance ) / 오버라이딩 ( Overriding )

by KDW999 2023. 1. 9.

상속

ㅡ 기존 클래스를 재사용하여 새로운 클래스 작성

ㅡ 코드의 재사용성, 유지보수에 효과적

ㅡ 생성자는 상속 X

 

class (자식)클래스명 extends (부모)클래스명 {
   // ...
}

부모 클래스 = 상위(super) 클래스

자식 클래스 = 하위(sub) 클래스

 

하위 클래스는 상위 클래스의 멤버 변수나 메서드를 기본적으로 사용할 수 있다. → 하위 클래스의 인스턴스를 생성하면 상위 클래스의 멤버 변수 초기화나 메서드 호출이 가능하다.

 

* 자바에선 다중 상속이 안된다.

class SmartPhone {
	
	String number;		
	
	void call(String telNumber) {
		System.out.println(number + " 에서 " + telNumber + " 로 전화합니다.");
	}	
}

class Galaxy extends SmartPhone {
	
	String type;
	
	void callType() {	
		System.out.println("기종 : "+ type);
	}	
}

public class Test {

	public static void main(String[] args) {
		
		Galaxy galaxyNote10 = new Galaxy();
		
		galaxyNote10.number = "010-8913-1111";
		galaxyNote10.call("010-1111-8913");
		
		galaxyNote10.type = "Note 10";
		galaxyNote10.callType();
		
	}
}

출력 화면

오버라이딩

ㅡ 상위 클래스로부터 상속받은 메서드를 변경

 

※ 조건

이름, 매개변수, 반환타입은 같아야 한다.

 

* 접근 제어자, 예외는 조건 내에서 변경 가능

접근 제어자는 상위 클래스의 메서드보다 좁은 범위일 경우

조상 클래스의 메서드보다 많은 수의 예외는 선언 X

인스턴스 메서드를 static 메서드나 그 반대로는 변경 X

 

★ 자바를 공부하면 오버로딩(Overloading)과 오버라이딩(Overriding)을 처음에 헷갈릴 수 도 있다.

ㅡ 오버로딩 : 과적재 / 매개변수 갯수나 데이터 타입 등으로 같은 이름의 메서드를 여러 개 사용 가능 → 한 이름의 메서드에 여러 개 적재같은 느낌으로

 

ㅡ 오버라이딩 : 재선언 / 상속받은 메서드의 내용을 다시 선언

 

super

하위 클래스에서 상위 클래스로부터 상속받은 멤버를 참조하는데 사용되는 변수

 

this는 클래스의 멤버 변수와 지역 변수를 구분

super는 상위 클래스의 변수와 하위 클래스의 변수를 구분하기 위해 사용

둘 다 주소로 접근하기에 생성자로 선언과 동시에 호출했다면 인자로 줬던 값이 저장되어 있다.

 

★ super() 메서드는 하위 클래스가 상위 클래스의 생성자를 호출 시 사용

상위 클래스에 생성자가 생성되있다면 하위 클래스의 생성자에서 super()로  첫 줄에 호출되어야 에러가 뜨지 않는다.

 

class People{
	String name;
	int age;
	String gender;
	
	People(String name, String gender){ // 상위 클래스에 생성자가 있다면 하위 클래스에도 생성자를 만들어주어야 한다
		this.name = name;
		this.gender = gender;
	}
		
	}

}

class Developer extends People{	
	String language_Skill;
	String company;

	Developer(String name, String gender, String comapny){
   
	super(name, gender);   // Developer 생성자 내에 상위 클래스의 생성자 호출
		
	}
}

'Java' 카테고리의 다른 글

다형성 ( Polymorphism )  (0) 2023.01.10
HashMap  (0) 2023.01.10
생성자 ( Constructor ) / this  (0) 2023.01.06
오버로딩 ( Overloading )  (0) 2023.01.06
메서드 ( Method )  (0) 2023.01.05

댓글