2014-04-16 14 views
8

Staram się odpowiedzieć na następujące pytanie:Którzy członkowie nie są dziedziczeni w klasie dziecka?

Klasa dziecko nie odziedziczy niektórych członków klasy nadrzędnej. Wymień trzy takie osoby.

Wiem, że członkowie prywatni nie są dziedziczeni do klas potomnych, a domyślni członkowie nie są dziedziczeni poza pakietem. Czy ktoś może ukończyć odpowiedź?

Zmieniano: - wierzę, że członkowie statyczne są dziedziczone zgodnie z poniżej demonstracji

public class sup { 
    public static void main(String agr[]){ 
    } 

    protected static int staticInt=0; 
    protected final int finalInt=3; 
    protected int protectedInt=0; 
    public String publicString = ""; 
    private int privateInt=8; 
} 

class sub extends sup{ 
    public void del(){ 
     staticInt=1; 
     staticInt=finalInt; 
    } 
} 

Odpowiedz

1

Brak - Odpowiedź na zgłoszenie warunków użytkowania.

Członkowie, którzy są widoczny w klasie dziecka, odpowiadają powyżej. Członkowie są zarówno polami, jak i metodami (każda ma własną przestrzeń nazw).

Dziedziczenie jako część instancji dziecięcej, to inna kwestia: niewidoczny prywatne członkowie są „odziedziczone” jako takie. Członkowie statyczne są częścią instancji klasy i nie są dziedziczone (nie można ich również zastąpić).Wszystkie metody final nie mogą zostać zmienione.

Podlegający konstruktory nie są dziedziczone; musisz ponownie zdefiniować tę samą sygnaturę w nowym konstruktorze podrzędnym.

Inne deklaracje w klasie mogą być definicjami klas. Tam słowo kluczowe static ma inne znaczenie, a jedno może wydawać oczywiste stwierdzenia dotyczące widoczności/dziedziczenia. Na przykład w odniesieniu do niestatycznych klas wewnętrznych, które mają <outer-class>.this (pojęcie rekursywne).

2

konstruktorów i członków statycznych

+1

Czy możesz wyjaśnić, dlaczego statyczne elementy nie są dziedziczone? Domyślam się, że jest to terminologia, istnieją pewne subtelne różnice między metodami statycznymi i instancyjnymi, jak omówiono tutaj: http://docs.oracle.com/javase/tutorial/java/IandI/override.html –

+0

Członki statyczne są dziedziczone. Testuję go za pomocą przykładowego programu – Roledenez

+0

Czy mówisz o widoczności? dziedziczenie i widoczność to dwie różne rzeczy. statyczne elementy mogą być widoczne, ale nie mogą ich zastąpić. – niiraj874u

3

z Oracle dokumentacji Java dla Inheritance:

Podklasa dziedziczy wszystkich członków (pola, metody i zagnieżdżone klasy ) ze swojej nadklasy. Konstruktorzy nie są członkami, więc nie są dziedziczone przez podklasy, ale konstruktor nadklasy mogą być wywoływane z podklasy

więc myślę, że tracisz konstruktorów tutaj. Statyczne Metody i pola również nie są dziedziczone, gdy są przepisywane w podklasach, po prostu ponownie używają podpisu i hide implementacji metody/pola w klasie nadrzędnej.

dziedziczenia pól i metod statycznych, odnoszą się do tego discussion jak steted przez Duncan, a to wielki poradnik Overriding vs Hiding

+1

Zobacz także tę dyskusję: [Czy metody statyczne są dziedziczone w Javie?] (Http://stackoverflow.com/questions/10291949/are-static-methods-inherited-in-java). To nie zgadza się z ostatnim akapitem. –

+0

@Duncan Dziękuję człowieku !! Właśnie odkryłem różnicę między Overriden i Hidden :) – mounaim

6

z JLS for Class Member

konstruktorów inicjalizatorów statycznych oraz instancji inicjalizatorów nie są członkami i dlatego nie są dziedziczone.

+2

Ding ding ding! Na koniec poprawna odpowiedź, a także z JLS :-) –

+1

@ Duncan o darn! :) jest to rzeczywiście * w pełni * poprawna odpowiedź. jak to przegapiłem ... +1 – Eugene

0

Nie można dziedziczyć pola prywatnego i konstruktora. nie można dziedziczyć konstruktora, ponieważ nie są członkami super klasy. możesz wywołać super-klasę konstruktora z jego klasy podrzędnej. możesz także uzyskać dostęp do prywatnego członka super klasy, dostępnego za pośrednictwem publicznej lub chronionej metody superklas.

+0

-1 Static members są dziedziczone. Zobacz dyskusje pod innymi odpowiedziami. –