首页 / JAVA / java – 了解继承和覆盖
java – 了解继承和覆盖
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 了解继承和覆盖,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1415字,纯文字阅读大概需要3分钟。
内容图文
![java – 了解继承和覆盖](/upload/InfoBanner/zyjiaocheng/780/dd789a6f621343c1babbdce1e3398aaa.jpg)
其实我的问题已经回答了,但我无法理解.这是一段代码:
public class Superclass {
public static void main (String[] args){
Superclass obj = new Subclass();
obj.doSomething(); #prints "from Superclass"
}
private void doSomething(){System.out.println("from Superclass");}
}
class Subclass extends Superclass {
private void doSomething(){System.out.println("from Subclass");}
}
它打印出:“来自超类”
Since the reference type of the object obj is SuperClass, a call to
doSomething() tries to access the private method defined in SuperClass
itself (private methods cannot be overridden). As doSomething() is
accessible within SuperClass, the main method can call doSomething()
without giving any error/s.
据我所知,调用方法的方式是这样的:(也许我完全错了):
对象的实例仅存储数据本身,当我调用实例方法时,Java会查看引用变量的类型,并从该类的类中调用该方法.
(这对我来说似乎合乎逻辑,并解释了为什么上面的代码打印“来自超类”)
但是将第一个doSomething()方法中的访问修饰符更改为protected会让我困惑,因为我无法理解Java如何知道如果引用类型是SuperClass而不是SubClass则存在重写.覆盖是否也改变了超类中的方法?
或者我对方法调用和覆盖如何工作完全错了?
我真的很感激如果有人能帮我解释我错过的东西.
解决方法:
私有方法以及静态方法和所有变量都无法覆盖,可以隐藏它们.因此,您需要将方法的访问修饰符从private更改为任何其他访问修饰符.
N.B:重写方法时要遵循一些协议;如果不能比被覆盖的方法更易于访问,则子类中定义的方法的访问修饰符必须具有相同的访问级别.返回类型必须是协变等…
内容总结
以上是互联网集市为您收集整理的java – 了解继承和覆盖全部内容,希望文章能够帮你解决java – 了解继承和覆盖所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。