2012-07-13 12 views

Odpowiedz

5

nie można przeciążenie pola (tylko metody mogą być przeciążone), użytkownik może być mylony z nadrzędnymi Fields - który i tak nie jest to możliwe, w końcu ukrywanie pola z nadrzędnych. Spójrz na to post.

+1

Myślałem, że tak było i początkowo byłem nieco zdezorientowany, kiedy do mnie przyszli. Programuję Javę tylko od trzech lat i nie natknąłem się na to. Chciałem tylko upewnić się, że niczego mi nie brakuje. –

+1

@BrandonWilson nie jest to możliwe – Pooya

0

wierzę, że java obsługuje interfejsy, interfejsy i powinien być w stanie pomóc Ci osiągnąć to, co starasz się osiągnąć

here's an example i found quick

here's a tutorial

tylko upewnić się, że nie jesteś przeciążenia członkowie publiczni w ten sposób.

0

spojrzenie na ten kod

class A<T> { 
    protected T field1; 
} 

class B extends A<String> { 
    public char field1; 

    public static void main(String[] args) { 
     A a = new B(); 
     a.field1 = 12442; 
    } 
} 

działa bez wyjątku jeśli pole1 overrided, należy podnieść wyjątek, ale to nie robi

a także ten przebiega bez wyjątku

class A<T> { 
    protected T field1; 
} 

class B extends A<Character> { 
    public char field1; 

    public static void main(String[] args) { 
     A a = new B(); 
     a.field1 = 12442; 
    } 
} 

To niemożliwe

0

język Java (JLS) nie pozwala na to, ale kodu bajtowego Javy (JVM) robi

Oracle JDK 1.8.0_45 nawet powołuje się na to, aby wdrożyć assert. Np

public class Assert { 
    static final int[] $assertionsDisabled = new int[0]; 
    public static void main(String[] args) { 
     System.out.println(int.length); 
     assert System.currentTimeMillis() == 0L; 
    } 
} 

generuje dwa Oracle JDK 1.8.0_45, jeden wyraźny (int[]) i jeden syntetyczny (bool) i jest szczęśliwie stanie odróżnić. Ale gdybyśmy oświadczył:

static final boolean $assertionsDisabled = false; 

to nie skompilować z:

the symbol $assertionsDisabled conflicts with a compile synthesized symbo 

Zobacz https://stackoverflow.com/a/31355548/895245 więcej szczegółów.

Możliwe uzasadnienie dlaczego to nie jest możliwe

Problemem jest to, że nie byłoby to możliwe, aby określić typ pola. Rozważ:

void f(int i) { System.out.println("int"); } 
void f(float i) { System.out.println("float"); } 
int i; 
float i; 
// Which overridden method is called? 
void m() { f(i); } 
Powiązane problemy