2010-06-16 13 views
12

Po prostu odświeżam funkcje serwera Java. Tak, mam małe zamieszanie dotyczące koncepcji dziedziczenia. Do tego mam następujący przykładowy kod:Zrozumienie pojęcia dziedziczenia w Javie

class Super{ 
    int index = 5; 
    public void printVal(){ 
     System.out.println("Super"); 
    } 
} 
class Sub extends Super{ 
    int index = 2; 
    public void printVal(){ 
     System.out.println("Sub"); 
    } 
} 
public class Runner { 
    public static void main(String args[]){ 
     Super sup = new Sub(); 
     System.out.println(sup.index+","); 
     sup.printVal(); 
    } 
} 

Teraz Powyższy kod daje mi wyjście jak: 5, Sub.

Tutaj nadpisujemy metodę printVal(), więc jest zrozumiałe, że uzyskuje dostęp tylko do metody klasy potomnej.

Ale nie mogłem zrozumieć, dlaczego to dostęp do wartości x od klasie Super ...

góry dzięki ....

+0

Proszę skomentować, która odpowiedź jest najbliższa, która jest właściwa. – harshalb

Odpowiedz

8

Obiekty mają typy, a zmienne mają typy. Ponieważ można umieścić:

Super sup = new Sub(); 

Teraz masz zmienną sup typu Super która odnosi się do obiektu typu Sub.

Podczas wywoływania metody na obiekcie metoda, która jest uruchamiana, jest wybierana na podstawie typu obiektu , dlatego drukuje "Sub" zamiast "Super".

Po uzyskaniu dostępu do pola w obiekcie, pole jest wybierany na podstawie rodzaju zmiennej, dlatego można dostać 5.

11

ten nazywany jest instancja zmiennej ukrywanie - link. Zasadniczo masz dwie oddzielne zmienne, a ponieważ typ odwołania to Super, będzie używał zmiennej index z Super.

+1

Cholera, właśnie napisałem to samo zdanie :-). – helpermethod

2

Indeks to po prostu pole należące do klasy nadrzędnej . Ponieważ należy do klasy nadrzędnej, oznacza to, że jest atrybutem dla wszystkich dzieci. po prostu pojęcie:

Class zwierząt może mieć pole wiek i pole nazwę Wszystkie sub klas będą dzielić te atrybuty, ale musiałby dodatkowe pole (s), które mają być zawarte w tych tylko dla dzieci. Na przykład hairColour może być jedynym atrybutem klasy psa, ale nie do klasy wąż, który może mieć prostą unikalny atrybut jadowity

W tej strukturze wszystkich zwierząt mają nazwy i wieku, które jest to, co może zdefiniować Zwierzęta w ogóle, każdy gatunek ma jakiś dodatkowy unikalny atrybut, który jest zawarty w ich odpowiednich podklasach.

Twój kod nie pokazuje tego wyraźnie, ponieważ twoja podklasa nie ma konstruktora, w rzeczywistości nie ma połączenia z super konstruktorem. Jak wyjaśnił Petar, twój prywatny atrybut indeks jest dostępny z super klasy

2

Tak dzieje się coz funkcje następujące wiązania w czasie wykonywania, podczas gdy zmienne są powiązane w czasie kompilacji.

Więc zmienne zależą od typu danych odniesienia, podczas gdy funkcje zależą od wartości reprezentowanej przez typ danych odwołania.

+2

Czy można exaplain gdzie jest wskaźnik w java – harshalb

0

Kiedy przypisanie przedmiotu sub klasy nadrzędnej klasy obiektu tylko wspólną właściwość zarówno klasa może być zaakceptowany przez obiekt klasy nadrzędnej, nazywany jest jako obiekt krojenie Dlatego wartość klasy patentowy 5 drukowany jest jej tylko zdarzyć z właściwością nie metodą