Nie. Nie ma sensu na to pozwalać.
Powodem jest to, że podklasy ogólnie definiują zachowanie dodatkowe. Jeśli można przypisać obiekt nadklasy do odwołania do podklasy, wystąpią problemy w czasie wykonywania podczas próby uzyskania dostępu do elementów klasy, które w rzeczywistości nie istnieją.
Na przykład, jeżeli zostały dopuszczone:
String s = new Object();
byłoby uruchomić w niektórych dość złych problemów. Co się stanie, jeśli spróbujesz wywołać metodę String
? Czy środowisko uruchomieniowe ulegnie awarii? A może wykonano by operację no-op? Czy to powinno się skompilować?
Jeśli środowisko wykonawcze uległo awarii, można użyć sprawdzeń w czasie wykonywania, aby upewnić się, że otrzymane obiekty będą faktycznie zawierać żądane metody. Ale w zasadzie wprowadzasz gwarancje, że system typu Java już zapewnia podczas kompilacji. Tak naprawdę ta "funkcja" kosztowała cię tylko garść kodu sprawdzającego typ, którego nie powinieneś był pisać.
Jeśli zamiast nieistniejących metod wykonano operacje bez oportunistyczne, niezwykle trudno byłoby zapewnić, że programy będą działać tak, jak napisane, gdy członkowie, do których chcemy uzyskać dostęp, nie istnieją, ponieważ każde odwołanie może być naprawdę zgodne z Object
pod adresem dowolny punkt. Może to być łatwe do opanowania, gdy pracujesz samodzielnie i kontrolujesz cały swój kod, ale gdy masz do czynienia z innym kodem, te gwarancje zasadniczo znikają.
Jeśli chcesz, aby kompilator wykonywał sprawdzanie, zakładając, że autorzy kompilatorów nie będą cię ścigać i rzucą ci surową rozmowę, to znów powrócisz do "normalnego" zachowania. Znowu, to po prostu dużo pracy dla zerowej korzyści.
Krótko mówiąc: Nie, to nie jest dozwolone, ponieważ sprawia, że zerowy sens, aby to zrobić, a jeśli projektant język próbował pozwolić, że zostaną zamknięte, zanim będą mogły robić żadnych więcej szkody.
To nie ma sensu. Gdyby było to dozwolone, możesz mieć pola/metody, których oczekiwałbyś, że tam nie ma. Gdyby było to dozwolone, myślę, że projektanci języków mogli zostać zablokowani gdzieś, gdzie nie mogliby zadawać większych obrażeń. – awksp
czego się spodziewać? – Mark