2015-07-10 8 views
-3

Получение видимого путаницы ... Я читал, что статический метод не переопределяет, но в нижеприведенной программе не выполняется это правило ... Может кто-нибудь объяснить это подробно. Вот программа
Вывод программы является выход класса класса А.Статические методы Работа

public class JavaApplication6 { 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 
     A a=new B(); 
     a.r(); 
    } 

} 
class B extends A{ 
    static int d=200; 
    static void r(){ 
     System.out.println("hiiiiiiiiiiiiiiiii r"+d); 
    } 
} 
class A { 
    static int a=10,c=20; 
    static void r(){ 
     System.out.println("hiiii ar"+a); 
    } 
} 
+0

Если выход из метода A, то он не отменяется. – Hacketo

+0

На моем ноутбуке ваша программа произвела «hiiii ar10», что означает, что работает A.r(). Таким образом, результат показал, что для статического метода не происходит чрезмерного перерасхода. –

+0

Ключевое слово 'extend' означает наследование, а не переопределение. Кроме того, два класса не являются «статическими» - они имеют «статические» методы, но сами классы не являются статическими. – TDG

ответ

0

Статические методы никогда не переопределяются дочерними классами. Если вы поместите аннотацию @Override, она даст ошибку компиляции, которую вы не можете переопределить, говоря об удалении аннотации.

«Метод method1() типа ребенка должны переопределить или реализовать супер метод типа»

наследуется, хотя в дочернем классе.

0

Статические методы не могут быть переопределены, но это может быть шкура родительские статические методы

Для аккуратной примера посмотрите здесь.

И это java-документация, объясняющая разницу между переопределяющими методами экземпляра и сокрытием класса (статических) методов.

Перекрытие: Перекрытие в Java просто означает, что конкретный способ будет вызываться, основываясь на типе времени выполнения объекта, а не на компиляции типа времени его (как в случае с переопределенными статическими методами)

Скрытие: методы родительского класса, которые являются статическими, не являются частью дочернего класса (хотя они доступны), поэтому нет вопроса о , отменяющем его. Даже если вы добавите еще один статический метод в подкласс, , идентичный тому, который находится в его родительском классе, этот статический метод подкласса уникален и отличается от статического метода в его родительском классе.

для получения более подробной информации click here надеюсь, что это вам поможет.

0

Статический метод нельзя переопределить, код, который у вас есть, является примером метода Hidding. В приведенном выше примере ваш метод класса B скрыт, используя статический ключ.

Смежные вопросы