学习向上转型和向下转型的一个好例子

向上转型: 父亲 f=new 孩子();

向下转型:

父亲 f=new 孩子2();

孩子2 c=(孩子2)f;//孩子 c=f;这样是错误的,将父类对象直接赋给子类是错误的,因为父类对象也不一定是子类的实例。

一个四边形不一定就是平行四边形也许是梯形,越是具体的对象具有的特性就越多,越抽象的对象具有的特性越少,在向下转型操作时,将特性范围小的对象转换为特性范围大的对象时肯定会出问题,所以需要告知编译器这个对象就是平行四边形。

将父类对象强制转换为某个子类对象,这种方式称为显式类型转换。向下转型时必须使用。

 1 class Person{
 2   private String name;
 3   private int money;
 4   public Person(){
 5     name="Tom";
 6     money=1000;
 7   }
 8   public Person(String Name,int Money){
 9     name=Name;
10     money=Money;
11   }
12   public void feed(Pet pet){
13     pet.eat();
14     if(pet instanceof Dog){
15       money-=10;
16     }else if(pet instanceof Penguin){
17       money-=20;
18     }
19     System.out.println("the master's remanent money is "+money);
20   }
21 }
22 class Pet{
23   protected String name;
24   protected int health;
25   public Pet(){
26     name="pp";
27     health=100;
28   }
29   public void eat(){
30     System.out.println("pet eat");
31   }
32 }
33 class Dog extends Pet{
34   public void eat(){
35     health+=10;
36     System.out.println("dog eat");
37   }
38 }
39 class Penguin extends Pet{
40   public void eat(){
41     health+=20;
42     System.out.println("penguin eat");
43   }
44 }
45 public class HelloWorld{
46   public static void main(String args[]){
47     Person LiMing=new Person("LiMing",2000);
48     Dog d=new Dog();
49     Penguin p=new Penguin();
50     LiMing.feed(d);
51     LiMing.feed(p);
52   }
53 }

这个人喂食动物的例子还可以说明一下下

结果是

 

posted @ 2016-12-12 17:38  叶缓  阅读(3681)  评论(0编辑  收藏  举报