Part 4. 상속 I
상속은 코드의 재활용에 유용하며, 자식 클래스(서브클래스)는 부모 클래스(슈퍼클래스)로부터 파생된 객체로서 부모 클래스가 가지고 있는 모든 속성들을 상속받아 사용할 수 있다.
정의 형식
class Animal { // 부모 클래스
}
class Cat extends Animals {
}
접근지정자의 종류와 성격
접근 지정자 |
자신의 클래스 |
같은 패키지 |
하위 클래스 |
다른 패키지 |
private |
O |
X |
X |
X |
생략(기본 접근 지정자) |
O |
O |
X |
X |
protected |
O |
O |
O |
X |
public |
O |
O |
O |
O |
메서드 오버라이딩이란
서브클래스에서 슈퍼클래스와 동일한 이름의 메서드를 새롭게 정의해서 슈퍼클래스의 메서드를 더 이상 사용하지 않고(은닉하고) 서브클래스에서 새롭게 정의한 메서드를 사용하는 것
메서드 오버라이딩을 할때는 슈퍼클래스 메서드의 이름, 전달인자의 자료형과 전달인자의 개수를 동일하게 정의해야 한다.
은닉된 슈퍼클래스의 메서드의 기능을 불러오기 위해서는 레퍼런스 변수 super를 사용해서 처리한다. super.메서드();
========================== 다른 패키지의 클래스를 호출하는 형식 ===================
package training;
import ex.phone.Mp3; // ex.phone 패키지의 Mp3 클래스를 호출
public class Ex07 {
public static void main(String[] args) {
Mp3 mp=new Mp3("ever", 256);
mp.print();
}
}
=================================================================================
========================== 상속 및 메소드 오버라이딩 ===================
package training;
class MyPoint2D {
int x=10;
int y=20;
// JVM 디폴트 생성자를 제공 : 전달인자 없는 형태
// 프로그래머가 전달인자 없는 생성자를 만들어주면 없어진다.
public MyPoint2D(int x, int y){
System.out.println("MyPoint2D");
}
public MyPoint2D(){
}
}
class MyPoint3D extends MyPoint2D { // 슈퍼클래스의 전달인자 없는 생성자 호출
int x=40;
int y=50;
int z=30;
void show(){
System.out.println(this.x+","+this.y+","+z);
}
void supershow(){
System.out.println(super.x+","+super.y+","+z);
//System.out.println(super.x+","+super.y+","+super.z); // z는 부모에 없는 필드
}
}
public class Ex12 {
public static void main(String[] args) {
MyPoint3D pt=new MyPoint3D();
pt.show();
pt.supershow();
}
}
=================================================================================
========================== 접근 지정자 사용예 ===================
package training;
class Point2D{
// 서브 클래스에서 멤버를 접근허용하기 위한 접근 지정자는 protected
// 기본(디폴트) 접근지정자
int x;
int y;
//private int x;
//private int y;
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
}
class Point3D extends Point2D{
private int z;
public int getZ() {
return z;
}
public void setZ(int z) {
this.z = z;
}
public void show(){
System.out.println(x + "," + y + "," + z);
}
}
public class Ex10 {
public static void main(String[] args) {
// Point3D pt=new Point3D(1,2,3);
Point3D pt=new Point3D(); //
pt.setX(10);
pt.setY(20);
pt.setZ(30);
// System.out.println( pt.getX() +" : pt.getX() , " + pt.getY() + " : pt.getY() ," + pt.getZ() + " : pt.getZ()");
System.out.println( pt.x +" : pt.getX() , " + pt.getY() + " : pt.getY() ," + pt.getZ() + " : pt.getZ()");
}
}
=================================================================================
'수업 > 자바2JDK입문' 카테고리의 다른 글
Part 4. 상속 II 생성자, 레퍼런스 형변환 (2) | 2008.08.11 |
---|---|
상속을 이용한 클래스 설계 및 출력 (0) | 2008.08.08 |
Part 3. static (2) | 2008.08.07 |
Part 3. 생성자 (0) | 2008.08.07 |
Part 2 & 3 메소드와 클래스 (0) | 2008.08.06 |