A sentimental robot

상속관계를 통한 다형성과 업캐스팅 본문

Java

상속관계를 통한 다형성과 업캐스팅

GOD03219 2018. 1. 5. 09:45


class Animal {

 public void cry() {
   }
}

class Dog extends Animal {
 public void cry() {
  System.out.println("A dog cries");
 }
}

class Cat extends Animal {
 public void cry() {
  System.out.println("A cat cries");
 }

}

public class Day1 {

 public static void main(String[] args) {
  
  Animal an = new Dog();  // upcasting
  an.cry();


  an=new Cat();     // 동적바인딩 > 다형성
  an.cry();
  
 }

}

 


 


class Animal {    // Animal 클래스에서 사용되는 cry함수 바디 안에 실제 실행되는 코드가 없기 때문에 추상클래스나 인터페이스로 만드는 게 좋겠다.

 public void cry() {


  }
}

class Dog extends Animal {
 public void cry() {
  System.out.println("cryDog");
 }
}

class Cat extends Animal {
 public void cry() {
  System.out.println("cryCat");
 }

}

class Snow {
 public void sound(Animal an) {        // 다형성
  an.cry();
  
 }

}

public class Day1 {

 public static void main(String[] args) {

  Snow snow = new Snow();


  snow.sound(new Cat());      // cryCat출력,  문제점-->cry함수를 호출할때마다 새로운 Cat객체 생성
  snow.sound(new Dog());    // cryDog출력
 }

}

 

 

 

 

코드 수정


 


abstract class AI {
 abstract void enemy();

 abstract void stop();

}

class Alpha extends AI {
 void enemy() {
  System.out.println("Im AlphaGo");
 }

 @Override
 void stop() {
  System.out.println("AlphaGo stop");

 }
}

class Beta extends AI {
 void enemy() {
  System.out.println("Im BetaGo");
 }

 @Override
 void stop() {

  System.out.println("BetaGo stop");
 }
}

class Baduk {
 AI ai;

 Baduk(AI ai) {
  
  this.ai = ai;    // 업캐스팅
 }

 void play() {
  ai.enemy();
 }

 void stop() {
  ai.stop();
 }

}

public class Day1 {

 public static void main(String[] args) {

  Baduk ba = new Baduk(new Alpha());
  ba.play();
  ba.stop();
  Baduk ba2 = new Baduk(new Beta());
  ba2.play();
 }
}

 

 

 


'Java' 카테고리의 다른 글

우주에서 랜덤하게 살아남기  (0) 2018.01.08
CRUD, LinkedList  (0) 2018.01.08
익명클래스, anonymous class  (0) 2018.01.04
중첩 인터페이스  (0) 2018.01.04
Generic  (0) 2017.12.29