본문 바로가기

java,jsp,spring/java

java 상속

상속

  • 객체 지향의 상속
  • 서브(자식)클래스의 간결화
  • 클래스 관리 용이
  • 생산성 향상

  • 상속 선언

  • 특징
    1. 다중 상속 안됨 > 자식 클래스 한개가 여러 부모 클래스에게서 상속을 못받음
    2. 상속 횟수는 제한 없음
    3. 최상위 조상 클래스는 java.lang.Object >> 자동 상속
     

  ex 예제

class Point{
	private int x,y;  // 외부에서 직접 속성 수정 못하게 하기 위해 private 사용 > 메소드로 수정
	public void set(int x, int y) {
		this.x = x; this.y = y;
	}
	public void showPoint() {
		System.out.println("("+x+","+y+")");
	}
}
class ColorPoint extends Point {
	private String color;
	public void setColor(String color) {
		this.color=color;
	}
	public void showColorPoint() {
		System.out.print(color);
		showPoint(); // 부모 클래스에서 상속 받음
	}
}
public class ColorPointEx {
	public static void main(String[] args) {
		Point p = new Point();
		p.set(1, 2);
		p.showPoint();
		
		ColorPoint cp = new ColorPoint();
		cp.set(3, 4);
		cp.setColor("red");
		cp.showColorPoint();
	}
}
  • 서브/슈퍼 클래스의 생성자 호출 및 실행
    • 서브 클래스 객체 생성 시 서브/슈퍼 클래스의 생성자가 모두 실행 됨
    • 서브/슈퍼 클래스의 생성자 중 슈퍼 클래스의 생성자가 먼저 실행

  • 서브 클래스에서 슈퍼 클래스의 생성자 선택
    • 여러 생성자 작성 가능
    • 생성자 하나 선택
    • 컴파일러가 자동으로 선택 > 기본 생성자가 없으면 오류 발생
    • super() 이용 > 인자(매개변수)를 넣을 수 있음, 첫번째 줄에 작성해야 함
    class Point2 {
    	private int x,y;
    	public Point2() {
    		this.x = this.y = 0;
    	}
    	public Point2(int x, int y) {
    		this.x = x; this.y = y;
    	}
    	public void showPoint() {
    		System.out.println("("+x+","+y+")");
    	}
    }
    class ColorPoint2 extends Point2 {
    	private String color;
    	public ColorPoint2(int x, int y, String color) {
    		super(x,y); // 매개변수가 2개인 슈퍼클래스의 생성자 호출 > x=5,y=6 입력
    		this.color = color;
    	}
    	public void showColorPoint() {
    		System.out.print(color);
    		showPoint();
    	}
    }
    public class SuperEx {
    	public static void main(String[] args) {
    		ColorPoint2 cp = new ColorPoint2(5,6,"blue");
    		cp.showColorPoint(); // 출력값: blue(5,6)
    	}
    }
    

 

업캐스팅(UPCASTING)

  • 서브 클래스의 객체 > 슈퍼클래스의 객체로 볼 수 있음
  • 업캐스팅된 레퍼런스(참조 변수)는 서브 클래스의 객체를 가르키지만 슈퍼 클래스의 멤버에만 접근 가능

다운캐스팅(DOWNCASTING)

  • 다운 캐스팅된 참조 변수는 슈퍼 클래스와 서브 클래스의 멤버에 접근 가능

instanceof 연산자

  • 객체 타입을 확인하는 연산자 > 형변환 가능여부를 확인하며 true / false 로 결과를 반환
  • 형태 : 객체 레퍼런스 instanceof 클래스 타입
class Person{}
class Student extends Person{}
class Researcher extends Person{}
class Professor extends Researcher{}

public class InstanceOfEx {
	static void print(Person p) { // Person p = new Student();
		if (p instanceof Person) {
			System.out.print("Person ");
		}
		if (p instanceof Student) {
			System.out.print("Student ");
		}
		if (p instanceof Researcher) {
			System.out.print("Researcher ");
		}
		if (p instanceof Professor) {
			System.out.print("Professor ");
		}
		System.out.println();
		}
	public static void main(String[] args) {
		System.out.print("new Student() -->\t"); print(new Student()); //메소드 호출 > 학생 객체를 넘김
		System.out.print("new Researcher() -->\t"); print(new Researcher());
		System.out.print("new Professor() -->\t"); print(new Professor());
	}
}

오버라이딩

  • 슈퍼클래스에 있는 메소드를 동일하게 서브클래스에 만들어서 사용(메소드 재정의) 동적 바인딩 : 실행을 하는 시점에 파일의 성격이 결정

  • 오버라이딩(동적 바인딩), super(정적 바인딩) 키워드

  • 오버라이딩 vs 오버로딩
    비교요소 메소드 오버로딩 메소드 오버라이딩
    메소드 이름 같음 같음
    매개변수 타입 갯수가 같으면 타입이 달라야함 같음
    매개변수 갯수 타입이 같으면 갯수가 달라야함 같음
    리턴 타입 상관없음 같음

'java,jsp,spring > java' 카테고리의 다른 글

java 패키지  (0) 2022.08.01
java 추상클래스, 인터페이스  (0) 2022.07.31
java 접근 지정자, static  (0) 2022.07.25
java 객체 배열 등  (0) 2022.07.25
java 객체 지향  (0) 2022.07.23