java向上转型和向下转型1

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

11 public class Father { 22 public void eat(){ 33 System.out.println("我是父类的方法吃。。。。。"); 44 } 55 } 6 71 public class Son extends Father{ 82 93 public void eat(){ 104 System.out.println("我是Son的方法吃。。。。。"); 115 } 126 public void sleep(){ 137 System.out.println("Son睡觉"); 148 } 159 }

 测试

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

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

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

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

11 public class Son1 extends Father { 22 public void eat(){ 33 System.out.println("son1 的eat方法"); 44 } 55 public void sleep(){ 66 System.out.println("son1 的sleep方法"); 77 } 88 99 }

  看下边测试代码

1 1 public class Test { 2 2 public static void main(String[] args) { 3 3 4 4 tt(new Son()); 5 5 tt(new Son1()); 6 6 } 7 7 8 8 9 9 public static void tt(Son son){ 1010 1111 son.eat(); 1212 } 1313 public static void tt(Son1 son){ 1414 1515 son.eat(); 1616 } 1717 1818 }

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

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

1 1 public class Test { 2 2 public static void main(String[] args) { 3 3 4 4 tt(new Son()); 5 5 tt(new Son1()); 6 6 } 7 7 8 8 9 9 public static void tt(Father son){ 1010 //父类对象当做实例化参数 1111 son.eat(); 1212 } 1313 }
点赞
收藏

评论区

加载中...

相关推荐

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

java中多态的实现机制

多态的概念:  简单来说就是事物在运行过程中存在的不同状态,即父类或接口定义的引用变量指向子类或具体实现类的实例对象。程序调用方法在运行期才进行动态绑定,而不是引用变量的类型中定义的方法。多态存在的前提:1、存在继承关系,子类继承父类;2、子类重写父类的方法;3、父类引用指向子类对象。具体实例:1、定义一个父类:Animal

你不可不知的JS面试题(第二期)

1、什么是继承?子类可以使用父类的所有功能,并且对功能进行扩展。新增方法改用方法(1)、ES6使用extends子类继承父类的方法。// 父类    class A        constructor(name)            this.name name;                getNa

Java中ArrayList的向上转型问题(父类与子类的关系)

果然是java都没学好,今天写方法的时候想把方法参数写成List<父类,然后传子类进去统一处理,结果发现报错。丢人地百度了:ArrayList<ChildClass();包括泛型在内的整个作为类型是无法强转成ArrayList<FatherClass 如果想这样使用可以使用extends关键字来限制泛型参数的适用范围 List<T

Java 多态

类型的检测——向上转型向下转型向上转型:父类对象的引用指向子类对象,向下转型:向上转型的基础上再次指向子类的对象1.向上转型!(https://oscimg.oschina.net/oscnet/dd0d05d39a724e781b799ff5e35b921775d.jpg)!(https://oscimg.oschina.net/o

Java的类继承

知识点1、继承作用:提高代码的重用性,继承之后子类可以继承父类中的属性和方法减少重复代码条件:子类和父类要满足isa的逻辑关系,才能使用继承。如:苹果isa水果语法:使用extends连接子类和父类。子类extends父类Java是单继承,一个类只能继承一个父类。子类不能继承父类私有的属性,但是可以