Я хотел бы знать:
Статические методы не могут быть переопределены, потому что они не отправляются в экземпляр объекта во время выполнения. Компилятор решает, какой метод вызвать.
Вот почему вы получаете предупреждение компилятора, когда пишете
MyClass myObject = new MyClass();
myObject.myStaticMethod();
// should be written as
MyClass.myStaticMethod()
// because it is not dispatched on myObject
myObject = new MySubClass();
myObject.myStaticMethod();
// still calls the static method in MyClass, NOT in MySubClass
Статические методы могут быть перегружены (это означает, что у вас может быть одно и то же имя метода для нескольких методов, если они имеют разные типы параметров).
Integer.parseInt("10");
Integer.parseInt("AA", 16);
Статические методы нельзя переопределить, потому что переопределить нечего, поскольку это были бы два разных метода. Например
static class Class1 {
public static int Method1(){
return 0;
}
}
static class Class2 extends Class1 {
public static int Method1(){
return 1;
}
}
public static class Main {
public static void main(String[] args){
//Must explicitly chose Method1 from Class1 or Class2
Class1.Method1();
Class2.Method1();
}
}
И да, статические методы могут быть перегружены, как и любой другой метод.