Наследование методов класса

Мне сказали, что статические методы в 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 имеют наследование (если вы пытаетесь вызвать метод класса, он идет по цепочке наследования в поисках методов класса). Разве это когда-нибудь было не так? И есть ли какие-либо ОО-языки наследования, которые так испортили методы класса?


Итак, очевидно, статические методы наследуются, но не могут быть переопределены, поэтому разделяет ли С# эту проблему? Есть ли другие языки?


person Roman A. Taycher    schedule 15.06.2010    source источник


Ответы (3)


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

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

person Oak    schedule 15.06.2010
comment
Добавьте также не окончательный ответ :) - person Shimi Bandiel; 15.06.2010
comment
Я совершенно забыл об этом вопросе и совершил ту же ошибку, обсуждая java на irc несколько дней назад. - person Roman A. Taycher; 05.10.2010

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

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"
person ZeissS    schedule 15.06.2010
comment
Если бы B не расширил бы A, задание не сработало бы, и весь вопрос был бы бессмысленным... :D - person ZeissS; 15.06.2010

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

person Sid    schedule 15.06.2010
comment
Методы всегда совместно используются экземплярами, независимо от того, отмечены они как статические или нет. просьба изменить заявление. - person Singleton; 12.11.2010
comment
Я упомянул статическое значение. Методы — это поведение. - person Sid; 12.11.2010