Czy można przeładować typ pola na inny typ pola?Przeciążenie typu pola danych Java za pomocą innego typu pola
Jeśli tak, czy można podać przykłady?
Czy można przeładować typ pola na inny typ pola?Przeciążenie typu pola danych Java za pomocą innego typu pola
Jeśli tak, czy można podać przykłady?
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.
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. –
@BrandonWilson nie jest to możliwe – Pooya
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
tylko upewnić się, że nie jesteś przeciążenia członkowie publiczni w ten sposób.
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
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); }
dlaczego nie spróbujesz tego i zobaczysz, co się stanie. –