java向上转型和向下转型1

Wesley13
• 阅读 682

  在java继承体系中,认为父类(超类)在上层,子类在下层(派生类) ,向上转型就是把子类对象转成父类对象。

1 public class Father {    
2     public void eat(){
3         System.out.println("我是父类的方法吃。。。。。");
4     }
5 }

1 public class Son extends Father{
2     
3     public void eat(){
4         System.out.println("我是Son的方法吃。。。。。");
5     }
6     public void sleep(){
7         System.out.println("Son睡觉");
8     }
9 }

 测试

 1 public static void main(String[] args) {
 2            Father f=new Son();//子类向上转型           
 3            Person p=new Son();//普通的new
 4            f.eat();    
 5             //f.sleep();无法调用此方法 此方法不存在
 6            p.eat();
 7            p.sleep();
 8     
 9         
10     }    
11  运行结果: 我是子类的方法吃
12                 我是子类的方法吃
13                 睡觉

  此处无法调用f.sleep() ,就是向上转型之后会失去父类中没有定义的方法,只能调用父类中定义的方法。那到底 向上转型有什么用处那 为何不直接那子类自己定义的对象直接调用?

   如果直接new Son() 打点调用也可以  这样就没有体现出面向对象的抽象的编程思想,而且 代码的可扩展性差。 

   若果该父类还有一个子类Son1 

1 public class Son1 extends Father {
2     public void eat(){
3         System.out.println("son1 的eat方法");
4     }
5     public void sleep(){
6         System.out.println("son1 的sleep方法");
7     }
8 
9 }

  看下边测试代码

 1 public class Test {
 2     public static void main(String[] args) {
 3        
 4         tt(new Son());
 5         tt(new Son1());
 6     }
 7     
 8     
 9     public static void tt(Son son){
10         
11         son.eat();
12     }
13     public static void tt(Son1 son){
14         
15         son.eat();
16     }
17 
18 }

    我的tt方法 中需要调用 各个子类的一些或所有方法,代码如上所示,假若我有很多个子类 这样 代码就显的特别沉于 重复率太高

  向上转型就可以完美的解决此类问题:无论我有多少个子类都可以 一个方法搞定。。

 1 public class Test {
 2     public static void main(String[] args) {
 3        
 4         tt(new Son());
 5         tt(new Son1());
 6     }
 7     
 8     
 9     public static void tt(Father son){
10         //父类对象当做实例化参数
11         son.eat();
12     }
13 }
点赞
收藏
评论区
推荐文章
Jacquelyn38 Jacquelyn38
3年前
你不可不知的JS面试题(第二期)
1、什么是继承?子类可以使用父类的所有功能,并且对功能进行扩展。新增方法改用方法(1)、ES6使用extends子类继承父类的方法。// 父类    class A        constructor(name)            this.name name;                getNa
Wesley13 Wesley13
3年前
java中多态的实现机制
多态的概念:  简单来说就是事物在运行过程中存在的不同状态,即父类或接口定义的引用变量指向子类或具体实现类的实例对象。程序调用方法在运行期才进行动态绑定,而不是引用变量的类型中定义的方法。多态存在的前提:1、存在继承关系,子类继承父类;2、子类重写父类的方法;3、父类引用指向子类对象。具体实例:1、定义一个父类:Animal
Wesley13 Wesley13
3年前
Java中ArrayList的向上转型问题(父类与子类的关系)
果然是java都没学好,今天写方法的时候想把方法参数写成List<父类,然后传子类进去统一处理,结果发现报错。丢人地百度了:ArrayList<ChildClass();包括泛型在内的整个作为类型是无法强转成ArrayList<FatherClass 如果想这样使用可以使用extends关键字来限制泛型参数的适用范围 List<T
Wesley13 Wesley13
3年前
Java 多态
类型的检测——向上转型向下转型向上转型:父类对象的引用指向子类对象,向下转型:向上转型的基础上再次指向子类的对象1.向上转型!(https://oscimg.oschina.net/oscnet/dd0d05d39a724e781b799ff5e35b921775d.jpg)!(https://oscimg.oschina.net/o
Wesley13 Wesley13
3年前
Java的类继承
知识点1、继承作用:提高代码的重用性,继承之后子类可以继承父类中的属性和方法减少重复代码条件:子类和父类要满足isa的逻辑关系,才能使用继承。如:苹果isa水果语法:使用extends连接子类和父类。子类extends父类Java是单继承,一个类只能继承一个父类。子类不能继承父类私有的属性,但是可以
Wesley13 Wesley13
3年前
Java基础学习总结(8)——super关键字
一、super关键字  在JAVA类中使用super来引用父类的成分,用this来引用当前对象,如果一个类从另外一个类继承,我们new这个子类的实例对象的时候,这个子类对象里面会有一个父类对象。怎么去引用里面的父类对象呢?使用super来引用,this指的是当前对象的引用,super是当前对象里面的父对象的引用。
Wesley13 Wesley13
3年前
C++多态学习之向下强制类型转换
向下强制类型转换在C中,基类(父类)指针可以指向派生类(子类)对象,因为派生类对象也是一个基类对象(但反过来不一样,基类对象不是一个派生类对象)。然而基类指针只能调用基类的成员函数,如果试图使用该指针调用仅在派生类中含有的成员函数(子类特有的,不是继承和重写父类的函数),将会产生编译错误。为了避免这一错误,就必须将基类指针转换成为派
Wesley13 Wesley13
3年前
Java基础学习总结(4)——对象转型
一、对象转型介绍!(http://static.oschina.net/uploads/img/201512/31130644_mPJ1.jpg)  对象转型分为两种:一种叫向上转型(父类对象的引用或者叫基类对象的引用指向子类对象,这就是向上转型),另一种叫向下转型。转型的意思是:如把float类型转成int类型,把do
Wesley13 Wesley13
3年前
09面向对象高级特性二
面向对象高级特性二上转型对象(上溯)如果A类是B类的父类,当我们用子类创建对象,并把这个对象的引用放到父类的对象中时:Aa;BbnewB();     或        AanewB();ab;称父类对象a是子类对象b的上转型对象。上转型对象
小万哥 小万哥
8个月前
C# 继承、多态性、抽象和接口详解:从入门到精通
C继承在C中,可以将字段和方法从一个类继承到另一个类。我们将“继承概念”分为两类:派生类(子类)从另一个类继承的类基类(父类)被继承的类要从一个类继承,使用:符号。在以下示例中,Car类(子类)继承了Vehicle类(父类)的字段和方法:示例csharpc