如果静态成员在Java中没有继承,那么为什么访问修饰符(私有的,受保护的……)适用于它们?
也许,我不是100%清楚术语“继承”:当他们说“静态不继承”时,他们是指“不可见”还是“不能重新定义/重新实现”,或者两者兼而有之?
如果说访问修饰符在谈到静态类成员时只意味着可见性,而在谈到常规类成员时意味着可见性和重新实现的可能性,这是否正确?
PS:现在我认为“Java中的静态变量不是继承的,它们只存在于声明它们的类中”的说法在这个论坛上到处传播(例如:Java中静态变量的继承有什么规则?)不正确为
Java语言规范#8.4.8规定:
8.4.8继承、重写和隐藏
类C从它的直接超类继承超类的所有具体方法m(包括静态和实例),对于这些方法,下列所有内容均为真:
m是C的直接超类的成员。m是公共的,受保护的,或在与C相同的包中用包访问声明的。C中声明的方法没有签名是m的签名的子签名(§8.4.2)。
如果静态成员在Java中没有继承,那么为什么访问修饰符(私有的,受保护的……)适用于它们?
谁说静态成员不能继承,请参考下面的JLS(§example 8.2-2)。例
在Java中,“静态”仅仅意味着不需要对象来访问这个字段/方法。
如果一个类C声明或继承了一个静态方法m,则称m在C的超类和超接口中隐藏了任何方法m′,其中m的签名是m′签名的子签名(§8.4.2),否则C中的代码就可以访问这些方法。
所以,基本上你不能重写一个静态方法,但是你肯定可以继承一个静态方法,如果它不被子类隐藏的话。
阅读JLS关于类方法隐藏的章节(§8.4.8.2.隐藏(按类方法))。
根据留档(http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html)的第二个表,没有标识符的成员对子类不可见。 但是,当我运行下面的示例代码时,“1”(b的内容)被打印出来! 如果没有访问修饰符的成员不能从子类访问,那么为什么在本例中打印它 它应该抛出一个错误,就像在私有访问修饰符中一样,不是吗?
我是Java的初学者。我正在学习最终变量,并尝试了这段代码。 然而,Eclipse给了我一个错误。 我做错了什么?如何将所有对象的最终变量设置为静态?
问题内容: 我在Java中有一个“私有静态”嵌套类。访问修饰符对此类中的字段和方法的意义是什么?我已经尝试了公共和私有方式,但对我的申请没有影响。 问题答案: 两种嵌套类:1.静态(嵌套类)和2.非静态(也称为内部类) 现在,外部类可以访问内部类的所有成员,但是当您想要限制某些外部类访问它时,实际上您可以对类(嵌套类)的成员使用访问说明符。 有趣的读物:Source1,Source2
在 Java 语言中提供了多个作用域修饰符,其中常用的有 public、private、protected、final、abstract、static、transient 和 volatile,这些修饰符有类修饰符、变量修饰符和方法修饰符。本文将详细介绍访问控制修饰符。 在实际生活中,如果要获取某件物品,与其直接穿过堡垒的墙壁,从而导致墙壁毁灭和破坏,不如通过门口的警卫请求进入堡垒的许可。一般而言
本文向大家介绍Java访问修饰符原理及代码解析,包括了Java访问修饰符原理及代码解析的使用技巧和注意事项,需要的朋友参考一下 一、概述 访问等级比较:public > protected > default > private 无论是方法还是成员变量,这四种访问权限修饰符作用都一样 public:不管包外包内,所有类(子类+非子类)均可使用 protected 包内:所有类可使用 包外:子类可使
主要内容:私有(Private)成员,实例,保护(Protected)成员,实例,公共(Public)成员,实例,作用域保护,实例Scala 访问修饰符基本和Java的一样,分别有:private,protected,public。 如果没有指定访问修饰符,默认情况下,Scala 对象的访问级别都是 public。 Scala 中的 private 限定符,比 Java 更严格,在嵌套类情况下,外层类甚至不能访问被嵌套类的私有成员。 私有(Private)成员 用 private 关键字修饰,带