关于Java中继承所遇到的问题

   由于刚学习Java,在继承的内容中遇到了一个问题,令我百思不得其解
   因为根据继承的定义,子类继承父类除构造方法外的所有方法,如果不加以更改,默认继承完全继承父类的方法,现在本人写下这一组代码

img

img

   按照定义的话,Bird类中没有重新定义在Animal类中继承过来的setget方法中方法体的内容,那么会原封不动地继承此方法。那么按理说Bird类中继承过来的实例方法run()方法中的this.getName()应该调用的是Bird类继承过来的get方法,但当我将getset方法原封不动地加到Birs类体中,代码反而报错,那么就代表this.getName()调用的是Animal类中的get方法,但是,根据对象调用实例方法的定义,Bird类中创建的对象并不能调用其他类的实例方法,那getName()是如何调用的,哪位好心人能给出一个解答!

你将get,set原封不动的放在bird里面肯定报错,因为你的name是私有化的,子类中并没有name这个属性所以报错,this代表当前对象,如果你的当前对象是bird那么就是调用bird中的getname,如果子类中没有那就去父类中找,显然你子类是继承了getname方法的,子类中的getname在去调用父类的getname来获取name的

super.name = name

Bird类调用的确实是Animal类的get方法,但并不违反“一个类不能调用其他类的实例方法”,Bird的对象其实也是Animal类的一个对象,就像一只鸟既属于鸟类也属于动物类一样。
更多父类子类方法的应用请学习并理解Java的上转型对象和下转型对象。