静态类和单例模式之间存在什么真实(即实际)差异?
两者都可以在没有实例化的情况下调用,两者都只提供一个"实例",它们都不是线程安全的.还有其他区别吗?
当一个类扩展另一个类时,它继承了超类的所有方法和变量.如果在具有相同签名的子类中以不同方式定义方法和变量,则可以在子类中以不同方式使用它们.现在Oracle区分了覆盖和隐藏(http://docs.oracle.com/javase/tutorial/java/IandI/override.html).它表示实例方法会覆盖其超类的方法,而类方法会隐藏它."隐藏和覆盖之间的区别具有重要意义.被调用的被重写方法的版本是子类中的一个.被调用的隐藏方法的版本取决于它是从超类还是从子类调用的."
让我们假设我有2个类是和可能.是延伸可能.也许有String a.
class Maybe {
String a;
public static void printOut() {
System.out.println("Maybe");
}
public void printAndSet() {
a = "Maybe";
System.out.println(a);
}
}
class Yes extends Maybe {
public static void printOut() {
System.out.println("Yes");
}
pubilc void printAndSet() {
a = "Yes";
}
}
class Print{
public static void mail(String[] args) {
Maybe m = new Maybe();
Yes y = new Yes();
Maybe.printOut();
Yes.printOut();
m.printAndSet();
y.printAndSet();
}
Run Code Online (Sandbox Code Playgroud)
我说:它会打印出来,也许是的,也许是的
但在我阅读了Oracle文章后,我认为它必须打印出来:
yes
yes
maybe
yes
Run Code Online (Sandbox Code Playgroud)
因为实例方法会覆盖其超类方法.
我很确定我对输出是正确的,但我也很确定,甲骨文知道的更好,所以我想我只是不理解这篇文章.当我从超类的对象调用实例方法时,它使用覆盖的方法是不正确的.所以我不明白为什么要区分覆盖和隐藏!有人可以帮忙吗?
编辑; 插入代码而不是描述类!