java上转型和下转型(对象的多态性)


/*上转型和下转型(对象的多态性)
*上转型:是子类对象由父类引用,格式:parent p=new son
*也就是说,想要上转型的前提必须是有继承关系的两个类。
*在调用方法的时候,上转型对象只能调用父类中有的方法,如果调用子类的方法则会报错
*下转型:是父类向下强制转换到子类对象
*前提是该父类对象必须是经过上转型的对象。
*
*代码示例:*/

复制代码
 1 abstract class Parent{  2 abstract void grow();  3 }  4 class Son extends Parent{  5 void grow(){  6 System.out.println("我比父亲成长条件好");  7  }  8 void dance(){  9 System.out.println("我会踢球"); 10  } 11 } 12 public class test { 13 public static void main(String[] args) { 14 //上转型,用父类的引用子类的对象 15 Parent p=new Son(); 16 //调用父类中有的方法 17  p.grow(); 18 //p.dance();这里会报错,因为父类中没有dance()方法 19 20 //对进行过上转型的对象,进行强制下转型 21 Son s=(Son)p; 22 //调用子类中的方法 23  s.dance(); 24  } 25 }
复制代码

 

/*
* 在我们写程序中,很少会把代码写死,比如说还会有daughter类
* 然后在封装函数来调用对象,说不定会用到子类的方法,这里我们来讲解一下这一方面的知识*/

复制代码
 1 abstract class Parent{  2 abstract void grow();  3 }  4 class Son extends Parent{  5 void grow(){  6 System.out.println("我比父亲成长条件好一点:son");  7  }  8 void play(){  9 System.out.println("我会踢球"); 10  } 11 } 12 class Daughter extends Parent{ 13 void grow(){ 14 System.out.println("我比父亲成长条件好很多:daughter"); 15  } 16 void dance(){ 17 System.out.println("我会跳舞"); 18  } 19 } 20 public class test { 21 public static void main(String[] args) { 22 Parent p=new Son(); 23  show(p); 24 Parent p2=new Daughter(); 25  show(p2); 26  } 27 public static void show(Parent p){ 28 //现将父类中有的方法输出 29  p.grow(); 30 //对进行过上转型的对象进行类型判断,然后进行相应的强制下转型 31 if(p instanceof Son){ 32 //判断是哪个类的上转型对象,然后进行下转型 33 Son s=(Son)p; 34 //调用子类中的方法 35  s.play(); 36 }else if(p instanceof Daughter){ 37 Daughter d=(Daughter)p; 38  d.dance(); 39  } 40 41  } 42 }
复制代码

 

/*
* 在上转型中,编译程序的时候,看父类中有没有对象调用的方法,没有的话,就报错
* 例如:Parent p=new Son();
* p.play();
* play()方法在父类中没有,所以会报错
* 在运行的时候,看子类中是否有调用的方法,有的话,运行子类的方法(重写父类的方法)
*
* */


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM