본문 바로가기

KOSTA : 클라우드 네이티브 애플리케이션 개발 전문가 양성과정

05/03 17일차 객체지향언어II : 상속, 오버라이딩, package와 import

728x90

ShopCallTest.java
0.00MB

상속이란?

- 기존의 클래스를 재사용해서 새로운 클래스를 작성하는 것입니다.

- 자손은 조상의 모든 멤버를 상속받습니다.

- 자손의 멤버개수는 조상보다 적을 수 없습니다.

 

포함이란?

- 한 클래스의 멤버변수로 다른 클래스를 선언하는 것입니다.

- 작은 단위의 클래스를 먼저 만들고, 이들을 조합하여 하나의 커다란 클래스를 만들었습니다.

class Car{
	Engine e = new Engine(); // 엔진
    Door[] d = new Door[4];
}

 

클래스간의 관계결정하기

- 원은 도형이다(Circle is a Shape) : 상속관계

- 원은 점을 가지고 있다(Circle has a point) : 포함관계

class Shape{
	String color = "blue";
    void draq(){};
}

class Point{

	int x;
    int y;
    
    point(){
    	this(0,0);
    }
    
    point(int x, int y){
    	this.x = x;
        this.y = y;
    }

}

class Circle extends shape{
	Point center;
    int r;
    
    Circle(){
    	this(new Point(0,0),100);
	}
    Circle(Point Center, int r){
    	this.center = Center;
        this.r = r;
    }
}

 

오버라이딩이란?

- 상속받은 메서드의 내용을 변경하는 것입니다.

- 이름, 매개변수, 리턴타입이 동일해야 합니다. (조건)

- 자손에서 접근제어자를 조상보다 좁은 범위로 갈 수 없습니다.

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

class Parents{
	void parentsMethod() throws IOException, SQLException{
    }
}

class Child1 extends Parents{
	void child1Method() throws IOException{
    
    }
}

 

오버로딩 vs 오버라이딩

class Parent{
	void parentMethod(){}
}

class Child extends Parent{
	void parentMethod(){} // 오버라이딩
    void parentMethod(int i){} // 오버로딩
    
    void childMethod(){}
    void childMethod(int i){} // 오버로딩
    void childMethod(){} // err 중복정의
}

 

접근제어자

- 접근제어자를 사용하여 변수나 메서드의 사용 권한을 결정할 수 있습니다. 

- (a) private (b) default (c) protected (d) public

 

(a) private

- 해당 클래스안에서만 접근이 가능합니다.

public class Sample{
	private String secret;
    private String getSecret(){
    	return this.secret;
    }
}

 

(b) default

- 동일한 패키지안에서만 접근이 가능합니다.

package house;

public class HouseKim{
	String lastName = "Kim";
}
package house;

public class HousePark{
	public static void main(String[] args){
    	HouseKim hk = new HouseKim();
        System.out.println(hk.lastName()); // Kim
    }
}

 

(c) protected

- 동일 패키지 클래스 또는 해당 클래스의 상속받은 클래스의 접근이 가능합니다.

package house

public class HouseKim{
	protected String lastName = "Kim";
}
package house.person;

import house.HouseKim;

public class DanielKim extends HouseKim{
	public static void main(String[] args){
    	DanielKim dk = new DanielKim();
        System.out.println(dk.lastName); // Kim
    }
}

 

(d) public

- 어떤 클래스에서든 접근이 가능하다.

package house

public class HousePark{
	protected String lastName = "Park";
    public String info = "this is public msg";
}
import house.HousePark;

public class Sample{
	public static void main(String[] args){
    	HousePark hp = new HousePark();
        System.out.println(hp.info); // this is public msg
    }
}