我正在阅读Khalid Mughal 撰写的Java™SCJP认证程序员指南。
在“继承”一章中,它说明了
成员的继承与声明的可访问性紧密相关。如果超类成员可以通过子类中的简单名称来访问(不使用任何其他语法,如super),则该成员被视为继承的
它还提到静态方法不是继承的。但是下面的代码完全可以:
class A
{
public static void display()
{
System.out.println("Inside static method of superclass");
}
}
class B extends A
{
public void show()
{
// This works - accessing display() by its simple name -
// meaning it is inherited according to the book.
display();
}
}
我如何直接display()
在课堂上使用B
?甚至更多,B.display()
也可以。
这本书的解释仅适用于实例方法吗?
子类继承了所有可访问的方法。
子类继承其父级的所有公共成员和受保护成员,无论该子类位于哪个程序包中。如果该子类与其父级位于同一程序包中,则它还将继承父级的程序包私有成员。你可以按原样使用继承的成员,替换它们,隐藏它们,或用新成员补充它们
继承的静态(类)方法和继承的非静态(实例)方法的唯一区别是,当你编写具有相同签名的新静态方法时,旧的静态方法只是隐藏的,不会被覆盖。
从页面上覆盖和隐藏之间的区别。
隐藏和覆盖之间的区别具有重要意义。被调用的覆盖方法的版本是子类中的版本。被调用的隐藏方法的版本取决于是从超类还是从子类调用
问题内容: 我已经读过1000多个位置,这些位置不继承静态变量。但是,这段代码如何正常工作? Parent.java Child.java 此代码显示“父母”。 还阅读了一些隐藏数据的概念。 Parent.java Child.java 现在输出为“ Child”。 那么这是否意味着 静态变量被继承,但是它们遵循数据隐藏的概念 ? 问题答案: 请查看oracle的文档:http : //docs.
问题内容: 我不太明白为什么可以在Java中继承静态方法? 继承就像从基类继承,而Static属于Class而不是Object。 那么,如果静态仅属于该类,为什么它会滴入派生类呢?它不应该只与定义它的类一起使用吗? 继承静态方法是一种好的编程习惯吗? 问题答案: 在Java中,静态方法不是 继承的 (或正确的词被 覆盖 ),但可以 隐藏 。 这里最大的不同是它们不像对象方法那样经受多态性。 运行时
我知道在Java中,静态方法和实例方法一样是继承的,不同的是,当它们被重新声明时,父实现是隐藏的,而不是重写的。好吧,这有道理。但是,Java教程指出 接口中的静态方法从不继承。 然而,
问题内容: 假设我有以下课程: 以及这两个子类: 和 我的问题是这两个子类从父类共享相同的静态curID成员,而不是拥有不同的成员。 所以,如果我这样做: r1,r2,r3的ID为0,1,2,而t1,t2,t3的ID为3,4,5。除了这些,我希望t1,t2,t3的值分别为0、1、2,即使用curID静态变量的另一个副本。 这可能吗?如何? 问题答案: 正如其他人已经写过的,静态成员已绑定到该类,因
问题内容: 我想要以下设置: 这在Java中可能吗?怎么样?如果可以避免的话,我宁愿不使用实例变量/方法。 谢谢! 编辑: 常量是数据库表的名称。每个子对象都是一个微型ORM。 问题答案: 您无法完全按照自己的意愿去做。也许可以接受的折衷方案是:
我正在用Java建模,并使用构建器模式。在许多情况下,一些共同成员是在父级中定义的,而其他成员则是在从父级继承的子级上定义的。一个例子如下: 如果删除,则在上得到相同的错误。看来我对静态嵌套类的继承有一个根本的误解。 为什么当返回时,编译器会抱怨方法不在中?有没有一种方法可以像我所尝试的那样,利用继承和这个构建器模式,允许在父级中定义公共成员,在子级中定义其他成员?