为什么当我们在基类和派生类中声明方法为静态并进行向上转换时,它调用基类方法。
class Base
{
static void show(){
System.out.println("Base class....");
}
}
class Derive extends Base
{
static void show(){
System.out.println("Drive class....");
}//method hidding.....
public static void main(String[] args)
{
Base b= new Derive();
b.show();
}
}
3条答案
按热度按时间hwamh0ep1#
这里有几个问题值得一提:
静态方法不被继承,也不被子类重写
静态方法不需要调用示例,它们需要一个类
所以,基本上,打电话
b.show();
实际上意味着打电话Base.show();
ldxq2e6h2#
只需再完成一个以上的答案。最好通过类而不是示例变量调用类方法:
Base.show()
不是b.show()
明确该方法是静态方法。这在隐藏方法而不是重写方法时特别有用。piok6c0g3#
你在打电话吗
Base.show
,不是Derive.show
. 方法隐藏未重写。§8.4.8.2. java语言规范的一部分给出了一个示例,它准确地演示了这里发生的事情:
一个班级(
static
)可以使用类型为实际包含方法声明的类的引用来调用隐藏的方法。在这方面,隐藏static
方法不同于重写示例方法。例如:生成输出:
Goodnight, Dick
因为问候语的调用使用s
,即Super
,以确定在编译时调用哪个类方法,而name
使用s
,即Sub
,以在运行时确定要调用哪个示例方法。