qq_33377699
qq_33377699
2020-04-09 10:39
采纳率: 0%
浏览 899

为什么子类实例化的父类对象可以调用子类独有的方法?

假设有一个子类和一个父类,
父类 dad = new 子类();
这时dad不能调用子类独有的方法,只能调用子类重写了父类的方法
但是为什么可以在子类重写父类的方法中调用子类独有的方法

public class Dad {
     public void dad() {}
     }
     //这是父类

public class Son extends Dad{
    @Override            //重写方法
    public void dad() {
            this.son(); //这里可以调用子类独有的方法,但是对象是dad类的
    }
    public void son( ) {}//这是子类独有的方法
}
//这是子类

public class Text {
    public static void main(String[] args) {

        Dad dad = new Son();
        dad.son()//报错,调用不了
        dad.dad()//这样却可以间接调用son()




  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

5条回答 默认 最新

  • weixin_44806772
    小白不很白 2020-04-09 10:49

    这是父类由子类实例化,new 后面是子类,则就是子类实例化,因为子类继承了父类,所以也继承了父类的方法和属性,当父类中有子类中没有的方法和属性时

    子类调用此属性和方法时是父类中此属性和方法的值。当子类调用父类有相同的属性时,调用时是子类中定义的值。总的来说就是要看new后面谁,就是实例化谁。

    点赞 评论
  • u014046563
    shy078 2020-04-09 11:02

    在继承关系中,子类拥有父类和子类的方法,父类拥有自己的方法,所以无法调用子类,当父类方法被重写,父类对象调用的是子类重写的方法,这也就是多态的提现

    点赞 评论
  • qq_23126581

    可以了解下多态。 或者说面向对象的过程:封装,继承,多态。看看你就清楚了。

    点赞 评论
  • weixin_44700117
    「已注销」 2020-04-09 13:49

    你要是想使用子类的特有方法需要使用向下转型,改为这么写
    Dad dad = new Son();
    Son son = (Son)dad;
    son.son()//可以访问子类方法
    dad.dad()//这个是重写的方法内部调用了特有方法

    点赞 评论
  • u013202518
    我的浪漫与极端 2020-04-09 22:37

    Dad dad = new Son();你这个都向上转型的,认得到就有鬼了兄弟

    点赞 评论

相关推荐