向上转型: 父亲 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 }
这个人喂食动物的例子还可以说明一下下
结果是
时间: 2024-10-25 04:23:08