2008. 8. 8. 15:30

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