java继承覆盖_java – 了解继承和覆盖

其实我的问题已经回答了,但我无法理解.这是一段代码:

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:重写方法时要遵循一些协议;如果不能比被覆盖的方法更易于访问,则子类中定义的方法的访问修饰符必须具有相同的访问级别.返回类型必须是协变等…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值