JavaRush /Blog Java /Random-PL /Rozszerzanie/zawężanie typów odniesienia: różne źródła – ...
Core
Poziom 35
Екатеринбург

Rozszerzanie/zawężanie typów odniesienia: różne źródła – różna interpretacja

Opublikowano w grupie Random-PL
Dzień dobry. Istnieje podejrzenie błędu w wykładach JavaRush. Niech będzie z niej dziedziczona klasa Parent i klasa Child.Niech będą następujące linie kodu: Parent parent = new Child; Child child = (Child) parent; Zgodnie z wykładem kursu poziomu 12, lekcja 1 (1. Polimorfizm i przesłonięcie), akapit 5) (Rzutowanie typów. ) pierwsza linia to zwężenie, a druga rozwinięcie (w wykładzie Krowa jest rodzicem, Wieloryb jest spadkobiercą) Ale to nieprawda. Wszystko jest dokładnie odwrotnie. Znaczenie tego, co jest opisane, jest jasne: w pierwszej linii utworzyliśmy obiekt typu Child i ograniczyliśmy jego użycie jedynie do metod opisanych w klasie Parent. Jest to jednak rozszerzenie i dlatego taka redukcja następuje w sposób dorozumiany. A w materiałach dodatkowych poziomu 10 było powiedziane: Twój tekst do linku...
Rozszerzenie oznacza przejście od typu bardziej szczegółowego do typu mniej szczegółowego, tj. przejścia od dzieci do rodziców. W naszym przykładzie konwersja dowolnego spadkobiercy (Dziecko, Dziecko2) na rodzica (Rodzic) jest rozwinięciem, przejściem do bardziej ogólnego typu. Podobnie jak w przypadku typów pierwotnych, to przejście jest wykonywane przez samą maszynę JVM, jeśli jest to konieczne i jest niewidoczne dla programisty, to znaczy nie wymaga żadnego dodatkowego wysiłku, ponieważ zawsze się udaje: zawsze możesz uzyskać dostęp do obiektu wygenerowanego z dziedzica według typu rodzica. Rodzic p1=nowe dziecko(); Rodzic p2=nowe Dziecko2(); W obu wierszach zmiennym typu Parent przypisuje się wartość innego typu, co oznacza, że ​​następuje konwersja. Ponieważ jest to rozszerzenie, odbywa się to automatycznie i zawsze kończy się sukcesem.
Przeciwnie, druga linijka mojego przykładu, według tego samego dodatku. materiałów to zawężenie wymagające jednoznacznego wskazania rodzaju w nawiasie. A na wykładzie jest to interpretowane jako rozszerzenie, co prawdopodobnie jest błędne. Proszę o wyjaśnienie. Nie chcę mieć podwójnego sprzecznego poglądu na rzutowanie typów. Poniżej fragment wykładu.W fragment wykładu (poprzednich) wykładach nadal pojawiały się podejrzenia błędów.Gdzie mam o tym napisać? Nie znalazłem tego w FAQ.
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION