A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Monster 中级黑马   /  2015-6-4 20:31  /  423 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

父类名  obj = new 子类;
obj.方法(子类覆写了的父类方法)-------最终调用的是谁的方法


父类名  obj = (父类名)new 子类;
obj.方法(子类覆写了的父类方法)-------最终调用的又是是谁的方法



原理是什么

9 个回复

倒序浏览
  1. class AA
  2. {
  3.         public void show()
  4.         {
  5.                 System.out.println("AA");
  6.         }
  7. }
  8. class AB extends AA
  9. {
  10.         public void show()
  11.         {
  12.                 System.out.println("AB");
  13.         }
  14. }
  15. public class Demo03 {

  16.         public static void main(String[] args) {
  17.                 // TODO Auto-generated method stub
  18.                 AA aa=new AB();
  19.                 aa.show();//运行结果"AB"
  20.                 AA ab=(AA)new AB();
  21.                 ab.show();// 运行结果"AB"
  22.         /* AA ab=(AA)new AB();
  23.            虽然将子类对象进行向上转型,转为父类类型,其实质上还是多态的表现形式。
  24.          和第一种将父类的引用指向子类对象的形式是一样的
  25.           */
  26.         }

  27. }
复制代码
回复 使用道具 举报
你这么多的技术分是怎么攥的啊,搞点技术分好难啊
只能水几个帖子赚黑马币
回复 使用道具 举报
后者有个类型转换,输出的是子类
回复 使用道具 举报
这不就是对象的多态,子类覆盖了父类的成员,调用时就是调用子类的成员
回复 使用道具 举报
感觉没什么区别~~
回复 使用道具 举报
上面的是调用子类的方法,下面的是调用父类的方法
回复 使用道具 举报
  1. class Father{
  2.         void show() {
  3.         System.out.println("Father");
  4. }
  5. }

  6. class Son extends Father {
  7.         void show() {
  8.         System.out.println("Son");
  9. }
  10. }

  11. public class Test{
  12.         public static void main(String[] args) {
  13.         Father f = new Son();
  14.         f.show();

  15.         Father f1 = (Father) new Son();
  16.         f1.show();
  17.        
  18. }
  19. }
复制代码

运行结果:
Son
Son
说明两个都是调用的子类的方法。
原理: 这个是父类引用指向子类对象。
编译和运行是两个独立的过程,编译时根据等号左边的类里是否有这个方法来判断对错。
比如这个程序里等号左边是Father类,有这个方法,编译通过。
但是运行时,是看等号右边的类。如果有该方法,就运行它,如果没有就查找父类的。
比如这个程序里等号右边是new Son(),所以运行时首先去Son里找方法,如果son里没有就去它的父类里找。
回复 使用道具 举报
父类名  obj = new 子类;
这本来就是对子类的提升,没有必要在再像这个
父类名  obj = (父类名)new 子类;
这样前面加个(父类名)。
回复 使用道具 举报
都是多态,都是调用子类的成员方法
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马