2010-06-15 2 views
3

мне сказали, что статические методы в Java не имеют наследования, но когда я пытаюсь следующий тестМетоды класса Наследование

package test1; 

public class Main { 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 

     TB.ttt(); 
     TB.ttt2(); 
    } 

} 

package test1; 

public class TA { 
static public Boolean ttt() 
{ 
    System.out.println("TestInheritenceA"); 
    return true; 
} 
static public String test ="ClassA"; 
} 

package test1; 

public class TB extends TA{ 
static public void ttt2(){ 
    System.out.println(test); 
    } 
} 

напечатанное :

TestInheritenceA ClassA

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


Так что, по-видимому, статические методы унаследованы, но не могут быть переопределены, так же как и C# поделиться этой проблемой? Есть ли другие языки?

ответ

5

В Java, поля и статические методы наследуются, но не могут быть перекрыты - Я считаю, что это то, что тот, кто вам сказал, что «они не наследуются ".

Не-частные, нестатические методы унаследованы и могут быть переопределены.

+2

Добавить также «нефинал» в ответ :) –

+0

@Shimi: очень верно, вместо этого вы просто оставите свой комментарий. – Oak

+0

Я полностью забыл этот вопрос и сделал ту же ошибку, обсуждая java на irc несколько дней назад. –

3

Это было всегда, но вы не можете переопределить методы класса:

class A { 
    public static void a() { system.out.println("A"); } 
} 

class B { 
    public static void a() { system.out.println("B"); } 
} 

A a = new A(); 
a.a(); // "A" 

B b = new B(); 
b.a() // "B" 

a = b; 
a.a(); // "A" 
+3

До тех пор, пока B продолжит A ... – pgras

+0

Если B не расширит A, назначение не будет работать, и весь вопрос будет бессмысленным ...: D – ZeissS

0

В этом смысл статичности. Это означает, что каждый класс. Статические поля и методы распределяются между экземплярами. Если вы изменяете статическое значение, оно отражается между экземплярами.

+0

Методы, всегда разделяемые между экземплярами, независимо от погоды, они помечены как статические или нет. любезно измените заявление. – Singleton

+0

Я упомянул статическое значение. Методы - это поведение. – Sid

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