寻筝
2016-12-13 02:48
采纳率: 72.7%
浏览 998
已采纳

请教下关于JAVA继承与多态的问题

package test;

public class A {
public void A1( ){
System.out.println("A的方法");
}
}

package test;

public class B extends A{

public void B1(){
    System.out.println("B的方法");
    }

}

图片说明
为什么a不能调用B的B1方法呢?

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

5条回答 默认 最新

  • Antway_ 2016-12-13 04:45
    已采纳

    a里面没有定义B的方法,子类可以调用父类的,但是父类不可以调用子类的,a是A的一个引用变量,B是A的子类。可以进行强制转换

    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • mazi2004 2016-12-13 03:03

    简单来说是编译行为和运行时行为
    1.编译器认为a的行为特征是A
    2.你可以将a强转为B,再执行B1()

    评论
    解决 无用
    打赏 举报
  • 昵称审核中 2016-12-13 03:13

    父类不拥有子类的行为,a属于父类,需要强转成B

    评论
    解决 无用
    打赏 举报
  • spongeBob_spongeBob 2016-12-13 07:23

    A a=new B();这是一个向上转型的过程 ,向上转型后子类B的方法会被隐藏掉,如果这时你要调用子类B的方法就要向下转型了

    评论
    解决 无用
    打赏 举报
  • A a=new B();
    a.XX这是多态的表达形式。

    运行时多态存在的三个必要条件:
    一、要有继承(包括接口的实现);
    二、要有重写;
    三、父类引用指向子类对象。

    多态表达形式可以实现父类应用,子类实现,但是调用的方法必须是可继承的方法,否则逻辑就会乱套

    http://www.jb51.net/article/34413.htm

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题