본문 바로가기
Language/JAVA

JAVA 5일차 - 오버라이딩 / 상속

by 코젼 2022. 6. 26.
728x90
반응형

💡 오버라이딩

# 오버라이딩(Overriding) - 상속받은 메소드의 내용을 변경하는 것
: 조상클래스로부터 상속받은 메서드의 내용을 상속받는 클래스에 맞게 변경하는 것을 말한다.

💬조건
1. 선언부가 같아야 한다.(이름, 매개변수, 리턴타입)
2. 접근제어자를 좁은 범위로 변경할 수 없다.
  - 조상의 메소드가 protected라면, 범위가 같거나 넓은 protected나 public으로만 변경할 수 있다.
3. 조상클래스의 메소드보다 많은 수의 예외를 선언할 수 없다.

💡 참조 변수

# 참조변수
* this - 인스턴스 자신을 가리키는 참조변수
* super - this와 같음. 조상의 멤버와 자신의 멤버를 구별하는 데 사용

- Object클래스를 제외한 모든 클래스의 생성자 첫 줄에는 생성자를 호출해야 한다.
그렇지 않으면 컴파일러가 자동적으로 'super();' 를 생성자의 첫 줄에 삽입한다.

💬super
# super() 사용
- 자손클래스에 기본 생성자를 생성한다.
  ex) Point() {}
- 조상클래스를 호출할 때 매개변수를 넣는다
  ex) super(10, 20);

🚩예제

x와 y와 z의 좌표를 구해서 각각의 위치를 출력하는 문제
- Point 클래스에서 x, y 좌표 출력
- Point3D에서 Point 클래스를 상속받아 getLocation() 메소드를 오버라이딩하여 z 좌표를 출력

💾소스코드

public class Pointer {
	public static void main(String[] args) {
		Point p1 = new Point(1, 3);
		System.out.println(p1.getLocation());
		
		Point3D p2 = new Point3D(1,3,5);
		System.out.println(p2.getLocation());
	}

}

class Point3D extends Point{
	int z;
	
	Point3D(int x, int y, int z) {
		// super(); -- 조상클래스의 기본 생성자. 조상클래스에 기본 생성자가 생성되어있어야 한다.
		
//		this.x = x;
//		this.y = y;
		super(x, y);
		
		this.z = z;
	}
	
	@Override
	String getLocation() {
		// TODO Auto-generated method stub
		return super.getLocation() + ", " + z; 
	}
}

class Point {
	int x;
	int y;
	
	Point() {
		
	}
	
	Point(int x, int y) {
		this.x = x;
		this.y = y;
	}
	
	String getLocation() {
		return x + ", " + y;
	}
}
728x90
반응형

댓글