2013-03-16 48 views
5

Làm thế nào các đối tượng lớp con có thể tham chiếu đến lớp siêu? Ví dụ:Thừa kế: Truy cập vào các lớp cơ sở từ một lớp con

public class ParentClass { 

    public ParentClass() {}  // No-arg constructor. 

    protected String strField; 
    private int intField; 
    private byte byteField; 
} 


public class ChildClass extends ParentClass{ 

    // It should have the parent fields. 
} 

đây khi các nhà xây dựng ChildClass được gọi, một đối tượng kiểu ParentClass được tạo ra, phải không?

ChildClass thừa kế strField từ đối tượng ParentClass, vì vậy đối tượng (đối tượng 01C) phải có quyền truy cập vào ParentClass đối tượng bằng cách nào đó, nhưng làm cách nào?

+0

Sử dụng siêu từ khóa: P – Sach

+0

Đây là danh hiệu thực sự tồi tệ. Xem xét việc đặt một số bối cảnh ở đó. – Nishant

+0

tôi đồng ý, (:-) bây giờ nó tốt hơn! –

Trả lời

5

Khi bạn thực hiện ChildClass childClassInstance = new ChildClass() chỉ một đối tượng mới được tạo.

Bạn có thể xem ChildClass như một đối tượng được xác định bởi:

  • lĩnh vực từ ChildClass + lĩnh vực từ ParentClass.

Vì vậy, các lĩnh vực strField là một phần của ChildClass và có thể được truy cập thông qua childClassInstance.strField

Vì vậy, giả định của bạn mà

ChildClass constructor được gọi là một đối tượng kiểu ParentClass được tạo ra

không chính xác. Ví dụ childClass được tạo ra là CSONG một cá thể ParentClass, và nó là cùng một đối tượng.

1

Bạn có thể truy cập strField giống như được khai báo trong ChildClass. Để tránh nhầm lẫn, bạn có thể thêm super.strField nghĩa là bạn đang truy cập trường trong lớp cha.

4

Ví dụ ChildClass không có đối tượng ParentClass, đối tượng đối tượng ParentClass. Là một lớp con, nó có quyền truy cập vào các thuộc tính/phương thức công khai và được bảo vệ trong lớp cha của nó. Vì vậy, ở đây ChildClass có quyền truy cập vào strField, nhưng không phải intFieldbyteField vì chúng là riêng tư.

Bạn có thể sử dụng nó mà không có bất kỳ cú pháp cụ thể nào.

1

Có. Bạn sẽ có thể truy cập vào hình thức strFieldChildClass, mà không thực hiện bất kỳ hành động đặc biệt nào (lưu ý rằng chỉ có một cá thể sẽ được tạo. Trẻ sẽ kế thừa tất cả các thuộc tính và phương thức từ cha mẹ).

1

tại đây khi hàm tạo ChildClass được gọi là đối tượng thuộc loại ParentClass được tạo, phải không?

Không!ChildClass constructor được gọi >> tầng lớp phụ huynh constr được gọi và Không Object của ParentClass được tạo ra lĩnh vực chỉ truy cập từ lớp cha được thừa kế trong ChildClass

ChildClass kế thừa strField từ OBJECT ParentClass, vì vậy nó (Đối tượng ChildClass) sẽ có quyền truy cập đối tượng ParentClass bằng cách nào đó, nhưng cách thực hiện?

Không, nó chỉ là một cách sử dụng lại mẫu của ParentClass để tạo mới ChildClass

0

Bằng cách tập trung vào việc kinh doanh của phi arg constructor và trình biên dịch của chỉ tham gia, trong khi các lớp được thừa kế (ChildClass) 's mặc định constructor (non-arg constructor) đang được gọi, một subobject của lớp cơ sở (ParentClass) được tạo ra thông qua cơ chế trợ giúp của trình biên dịch (chèn lớp cơ sở constructor gọi trong lớp dẫn xuất) và được bọc trong đối tượng của lớp dẫn xuất.

class Parent{ 
    String str = "i_am_parent"; 
    int i = 1; 
    Parent(){System.out.println("Parent()");} 
} 
class Child extends Parent{ 
    String str = "i_am_child"; 
    int i = 2; 
    Child(){System.out.println("Child()");} 
    void info(){ 
     System.out.println("Child: [String:" + str + 
          ", Int: " + i+ "]"); 
     System.out.println("Parent: [String: ]" + super.str + 
          ", Int: " + super.i + "]"); 
    } 
    String getParentString(){ return super.str;} 
    int getParentInt(){ return super.i;} 
    public static void main(String[] args){ 
     Child child = new Child(); 
     System.out.println("object && subojbect"); 
     child.info(); 
     System.out.println("subojbect read access"); 
     System.out.println(child.getParentString()); 
     System.out.println(child.getParentInt()); 

    } 
} 

kết quả:

Parent() 
Child() 
object && subojbect 
Child: [String:i_am_child, Int: 2] 
Parent: [String: ]i_am_parent, Int: 1] 
subojbect read access 
i_am_parent 
1 
Các vấn đề liên quan