2010-06-16 40 views
12

Tôi chỉ làm mới các tính năng oops của java. Vì vậy, tôi có một chút nhầm lẫn về khái niệm thừa kế. Đối với điều đó, tôi có một mã mẫu sau:Hiểu khái niệm về kế thừa trong Java

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(); 
    } 
} 

Bây giờ mã trên cho tôi kết quả là: 5, Sub.

Ở đây, chúng tôi đang ghi đè phương thức printVal(), vì vậy có thể hiểu được rằng nó chỉ truy cập phương thức lớp con.

Nhưng tôi không thể hiểu tại sao nó truy cập giá trị của x từ siêu lớp ...

Cảm ơn trước ....

+0

Vui lòng nhận xét câu trả lời gần nhất là câu trả lời đúng nhất. – harshalb

Trả lời

8

Đối tượng có loại và biến có loại. Bởi vì bạn đặt:

Super sup = new Sub(); 

Bây giờ bạn có một biến sup loại Super đó đề cập đến một đối tượng kiểu Sub.

Khi bạn gọi phương thức trên đối tượng, phương pháp chạy được chọn dựa trên loại đối tượng , đó là lý do tại sao nó in "Phụ" thay vì "Siêu".

Khi bạn truy cập vào một lĩnh vực trong một đối tượng, lĩnh vực được lựa chọn dựa trên các loại của biến, đó là lý do tại sao bạn nhận được 5.

11

này được gọi là dụ biến ẩn - link. Về cơ bản, bạn có hai biến riêng biệt và vì loại tham chiếu là Super, nó sẽ sử dụng biến số index từ Super.

+1

Chết tiệt, sắp sửa viết cùng một câu :-). – helpermethod

2

index chỉ đơn giản là một lĩnh vực thuộc tầng lớp phụ huynh . Bởi vì nó thuộc về lớp cha, nó có nghĩa là nó là một thuộc tính cho tất cả các trẻ em. Để đơn giản các khái niệm:

A Class Animal thể có một trường tuổi và một lĩnh vực tên Tất cả các lớp tiểu sẽ chia sẻ những đặc tính đó, nhưng sẽ có trường bổ sung (s), mà sẽ được chứa vào những chỉ dành cho trẻ em. Ví dụ hairColour có thể là thuộc tính duy nhất của lớp Dog, nhưng không đến lớp rắn, trong đó có thể có một thuộc tính duy nhất đơn giản độc

Trong cấu trúc này tất cả các động vật có một cái tên, và độ tuổi, trong đó là những gì có thể định nghĩa động vật nói chung, mỗi một specie có một số thuộc tính phụ (s) duy nhất cho chúng, được chứa trong các lớp con tương ứng của chúng.

Mã của bạn không hiển thị rõ ràng điều này, vì lớp con của bạn không có hàm tạo, thực sự không có lệnh gọi hàm tạo siêu. Theo giải thích của Petar, thuộc tính riêng tư của bạn chỉ số là quyền truy cập từ lớp siêu

2

Điều này xảy ra các chức năng coz theo sau thời gian chạy trong khi các biến bị ràng buộc tại thời gian biên dịch.

Vì vậy, các biến phụ thuộc vào kiểu dữ liệu của tham chiếu trong khi các hàm phụ thuộc vào giá trị đại diện bởi kiểu dữ liệu của tham chiếu.

+2

Bạn có thể exaplain đâu là con trỏ trong java – harshalb

0

Khi chúng ta gán đối tượng của lớp con cho đối tượng lớp cha chỉ thuộc tính chung cả lớp có thể được chấp nhận bởi đối tượng lớp cha, được gọi là đối tượng cắt đó là lý do tại sao giá trị của lớp 5 với thuộc tính không phải là phương thức

Các vấn đề liên quan