2008. 8. 8. 17:59

상속을 이용한 클래스 설계 및 출력

간단한 문제를 통해서 상속에 대해서 알아봅시다.

동물(Animal)과 개(Dog)와 사람(Human)이란 클래스를 서로 상속이란 개념을 도입해서 설계해 보도록 합시다.
슈퍼 클래스로는 동물(Animal)을 두고,
슈퍼 클래스에는 멤버변수로는 어떤 종인지의 구분을 위해서 kind와 다리의 개수를 저장하기 위한 leg를 둡니다.
또한 슈퍼 클래스의 멤버함수로는 getKind와 walk를 둡니다.
getKind 메서드는 어떤 동물인지를 알려주는 메서드이고 walk 메서드로 어떻게 걷는지를 알려주는 메서드입니다.
슈퍼 클래스 상속 관계로 개(Dog)와 사람(Human) 클래스를 설계해봅시다.
kind와

Animal

#kind : String

#leg : int

+Animal( )

+Animal(kind : String, leg : int)

+getKind( )

+walk( )

Dog

+bike( )

Human

+speak( )

1. ====================== Animal ====================================
package j4b1s;
public class Animal {
 protected String kind;
 protected int leg;
 public Animal() {
  super();
 }
 public Animal(String kind, int leg) {
  super();
  this.kind = kind;
  this.leg = leg;
 }
 public String getKind() {
  return kind;
 }
 public void setKind(String kind) {
  this.kind = kind;
 }
 public int getLeg() {
  return leg;
 }
 public void setLeg(int leg) {
  this.leg = leg;
 }
 public void walk(){
 }
}
===============================================================================
2. ====================== Human ====================================
package j4b1s;
public class Human extends Animal{
 public void speak(){
  System.out.print("Java개발자 이강국입니다.");
 }
}
===============================================================================
3. ====================== Dog ====================================
package j4b1s;
public class Dog extends Animal{
 public void bike(){
  System.out.println("멍멍하고 짖습니다.");
 }
}
===============================================================================
4. ====================== AnimalMain ====================================
package j4b1s;
public class AnimalMain {
 public static void main(String[] args) {
  Human human=new Animal();
  Dog dog=new Animal();
  Human speak=new Human();
  Dog bike=new Dog();
  human.kind="한국사람";
  human.leg=2;
  Human.speak();
  dog.kind="진돗개";
  dog.leg=4;
  Dog.bike();
  //System.out.println(human.getKind() + "은 다리가 "+ human.leg() + "개 이고 "+human.walk());
 }
}
===============================================================================

'수업 > 자바2JDK입문' 카테고리의 다른 글

Part 4. 상속 III 추상 클래스와 Final  (0) 2008.08.13
Part 4. 상속 II 생성자, 레퍼런스 형변환  (2) 2008.08.11
Part 4. 상속 I  (0) 2008.08.08
Part 3. static  (2) 2008.08.07
Part 3. 생성자  (0) 2008.08.07
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