부모 클래스에 만들어진 필드(변수)와 메소드(함수)를 자식 클래스가 물려 받는 것 -> 자식 클래스는 부모클래스와 동일한 필드 및 메소드를 만들 필요 x
중복되는 메소드를 상속시키면 부모 클래스를 수정하는 것으로
자식 클래스 전부의 해당 메소드를 수정할 수 있다.
public class Person{ // 부모 클래스
}
public class Student extends Person{ // Person에서 상속받음
}
public class StudentWorker extends Student{
}// 부모 클래스, 학생 클래스 상속
Point p = new Point();
ColorPoint cp = new ColorPoint(); // 서브 클래스 객체 생성
// 서브 클래스 객체는 슈퍼 클래스 멤버와 서브 클래스 멤버 모두 갖음.
자바에서는 클래스의 다중상속 x
상속 횟수 제한 x
최상위 클래스는 object
private : 현재 클래스만 접근 가능
디폴트 : 같은 패키지만 접근가능
protected : 서브클래스와 같은 패키지 클래스만 접근 가능
public 모두 접근 가능
서브 클래스 객체 생성시 : 서브 클래스와 슈퍼클래스의 생성자 모두 실행
순서는 슈퍼클래스 먼저 실행
이용하지 않으면 슈퍼 클래스 기본 생성자(인수 x)가 자동 선택됨.
서브 클래스의 객체에 대한 레퍼런스를 슈퍼 클래스 타입으로 변환
업캐스팅된 레퍼런스는 슈퍼 클래스의 멤버에만 접근 가능
Person p = new Student("이재문");
업캐스팅의 반대
Student s = (Student)p;
Studenet 객체 전체에 접근 가능 ( Person 클래스 포함 )
레퍼런스가 가리키는 객체가 해당 클래스 타입의 객체이면 true/ 아니면 false
슈퍼 클래스 메소드 무시 또는 덮어쓰기
class Shape{
public void draw(){
System.out.println("Shape");
}
}
class Line extends Shape{
public void draw(){
System.out.println("Line");
}
}
Line line = new Line();
line.draw();
Shaper shape = new Line();
shape.draw();
//둘다 line클래스안 draw 실행
실습문제
1.
public class ex1 {
class TV {
private int size;
public TV(int size) { this.size = size;}
protected int getSize() {return size;}
}
class ColorTV extends TV{
public int ColorTV(int size int model){ this.size=size;}
public void printProperty() {
System.out.print(getSize());
}
}
public static void main(String[] args) {
ColorTV myTv = new ColorTV(65,65536);
myTv.printProperty();
}
}
추가 예정입니다.