Widziałem niektóre przykłady języka Java, które używają słowa kluczowego this
, aby uzyskać metody nadklasy. Przykład: this.superClassMethod()
. W zwykłym przypadku użyjemy super
. Czy ktoś mógłby pomóc w wyjaśnieniu z przykładem, dlaczego programista użył this
zamiast super
? Dziękuję Ci.Dlaczego używać słowa kluczowego "this", aby uzyskać metody nadklasy?
Odpowiedz
Nie ma różnicy między i super.method()
aż wspomnianego method()
dostaje zamienione na w klasie rozmówcy.
Na przykład, z
class SuperClass {
public void method() {
System.out.println("SuperClass");
}
}
class SubClass extends SuperClass {
public SubClass() {
method();
this.method();
super.method();
}
}
Wywołanie
new SubClass();
Drukuje
SuperClass
SuperClass
SuperClass
Choć z
class SuperClass {
public void method() {
System.out.println("SuperClass");
}
}
class SubClass extends SuperClass {
@Override
public void method() {
System.out.println("SubClass");
}
public SubClass() {
method();
this.method();
super.method();
}
}
Wywołanie
new SubClass();
Drukuje
SubClass
SubClass
SuperClass
Równolegle, nie ma różnicy między this.field
i super.field
aż wspomnianego field
dostaje ukryte w klasie rozmówcy.
Na przykład, z
class SuperClass {
protected String field = "SuperClass";
}
class SubClass extends SuperClass {
public SubClass(String field) {
System.out.println(field);
System.out.println(this.field);
System.out.println(super.field);
}
}
Wywołanie
new SubClass("parameter");
Drukuje
parameter
SuperClass
SuperClass
Choć z
class SuperClass {
protected String field = "SuperClass";
}
class SubClass extends SuperClass {
private String field = "SubClass";
public SubClass(String field) {
System.out.println(field);
System.out.println(this.field);
System.out.println(super.field);
}
}
Wywoływanie
new SubClass("parameter");
Drukuje
parameter
SubClass
SuperClass
marginesie: methods()
się nadpisane podczas fields
się ukryty.
+1 za zwięzłe zdanie klucza "nie ma różnicy między this.method() i super.method(), dopóki wspomniana metoda nie zostanie nadpisana w klasie dzwoniącego." – TheBlastOne
Wszystko to jest prawdą, ale można ją skrócić do: Jeśli chcesz wywołać metodę superklasową, użyj 'super', w przeciwnym razie nie rób nic tak jak domyślnie (bez użycia' this') zawsze będzie używana "najnowsza implementacja". –
Dzięki człowieku. W końcu to dostałam – gjman2
Używanie this
nie wywołuje metody nadklasy. W rzeczywistości jest to zbyteczne, ponieważ specyficznie wywołuje metodę tej instancji. Może to być istotne, jeśli chcesz wywołać inny konstruktor tej samej instancji, ale poza tym jest tak samo, jak po prostu wywołanie metody.
Może to być przydatne do określania zakresu zmiennych (na przykład, gdy istnieje zmienna lokalna o tej samej nazwie, co zmienna instancji), aby upewnić się, że użyto zmiennej instancji, ale nie ma to znaczenia podczas wywoływania metod.
Osobiście myślę, że deweloper chciał skorzystać z uzupełniania kodu i IDE pokazuje możliwe po wprowadzeniu nazwy metody this.
:-)
@TheBlastOne Co? –
Wrong slot: O przepraszam – TheBlastOne
OK, początkowo byłem zdezorientowany :-D –
Super służy do metod dostępowych klasy bazowej, podczas gdy ten jest używany do dostępu do metod obecnej klasy.
Kilka odnośników
1) usage of this
2) critique on super on SO
Rozszerzanie pojęcia, jeśli piszesz super(), odnosi się do konstruktora klasy bazowej, a jeśli piszesz to(), to odnosi się do konstruktora klasy, w której piszesz ten kod.
class Animal {
void eat() {
System.out.println("animal : eat");
}
}
class Dog extends Animal {
void eat() {
System.out.println("dog : eat");
}
void anotherEat() {
super.eat();
}
}
public class Test {
public static void main(String[] args) {
Animal a = new Animal();
a.eat();
Dog d = new Dog();
d.eat();
d.anotherEat();
}
}
Wyjście będzie
animal : eat
dog : eat
animal : eat
Trzecia linia drukuje "zwierzę eat" dlatego wzywamy super.eat(). Gdybyśmy nazwali this.eat(), wydrukowałoby to jako "pies: jedz".
Wiele kodów java/sun java używa tego. kiedy nie trzeba przykład patrz Java \ AWT \ Event.java #translate
public void translate(int dx, int dy) {
this.x += dx;
this.y +=
}
(jeśli wyodrębnić src.zip i poszukać. w * .java będzie zobaczyć wiele przykładów takich jak ten, w którym jest bez przesłonięcia zmiennej lokalnej/paramu, ale nadal używają tego stylu:
Nic nie ma związku z parametrami lub automatycznym uzupełnianiem (jest to po prostu x) Uważam, że jest to standard kodowania, aby było jasne, że mówimy o metodzie lub polu current/this class.
Metoda podstawowa klasy: Nawet jeśli jeszcze nie przejechaliśmy w naszej klasie ss, może być w późniejszym terminie, więc jego przyszłość jest gotowa. Dopóki metoda nie zostanie nadpisana, działa dobrze, a jeśli jest przekroczona, to jest dokładna.
Uważam więc, że jest to najlepsza praktyka w zakresie kodowania w celu zachowania przejrzystości. To nie będzie nadpisywać kodu, ponieważ nie pisanie to tylko cukier składniowy, a kompilator doda go do kodu klasy.
- 1. Dlaczego powinienem używać słowa kluczowego "using", aby uzyskać dostęp do mojej metody klasy bazowej?
- 2. Używanie słowa kluczowego "this" w obiekcie JavaScript
- 3. Użycie słowa kluczowego "this" w języku Java
- 4. Klasy PHP, dlaczego warto używać słowa kluczowego publicznego?
- 5. Jak mogę pozbyć się słowa kluczowego `this` w lokalnych funkcjach?
- 6. Czy zawsze musimy używać asynchronicznego słowa kluczowego?
- 7. Dlaczego warto używać słowa kluczowego globalnego w języku C#?
- 8. Dlaczego używamy zmiennego słowa kluczowego w C++?
- 9. Kiedy należy używać słowa kluczowego "self"?
- 10. Jak używać ważnego słowa kluczowego w mixin?
- 11. Jak używać słowa kluczowego "podniesienie" w Pythonie
- 12. Nie należy używać "System.Runtime.CompilerServices.DynamicAttribute". Użyj „dynamiczne” słowa kluczowego zamiast
- 13. Dlaczego IntPtr nie potrzebuje niebezpiecznego słowa kluczowego?
- 14. Cuda słowa kluczowego yield
- 15. Dlaczego nie można użyć niebezpiecznego słowa kluczowego w kontekście iteratora?
- 16. Optymalizacje dla końcowego słowa kluczowego
- 17. rozciąga słowa kluczowego w rodzaju powrotnego w podpis metody Java
- 18. pozycja * statyczne * słowa kluczowego w deklaracji metody członkiem
- 19. Dlaczego obiektów nie można utworzyć bez użycia słowa kluczowego class?
- 20. Jak najlepiej używać słowa kluczowego const w C?
- 21. Wywołanie funkcji na tego słowa kluczowego
- 22. błąd używając ograniczać słowa kluczowego
- 23. Java - użycie słowa kluczowego "super"
- 24. Jak mogę powiedzieć układowi robot, aby nie rejestrował słowa kluczowego?
- 25. Interpretacja TypeScript "tego" słowa kluczowego w $ .ajax()
- 26. Jak używać słowa kluczowego "istnieje" w Spring Data, aby sprawdzić istnienie jednostki?
- 27. Skorzystanie z tego słowa kluczowego do dziedziczenia?
- 28. Dlaczego konstruktor podwójnego parametru zaczyna się od jawnego słowa kluczowego?
- 29. extern słowa kluczowego „brakującym specyfikacja typu”
- 30. Deklarowanie pole listy z końcowym słowa kluczowego
Czy metoda została nadpisana w podklasie? –