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 (poprzednich) wykładach nadal pojawiały się podejrzenia błędów.Gdzie mam o tym napisać? Nie znalazłem tego w FAQ.
GO TO FULL VERSION