2016-11-04 16 views
5

Tôi có đơn giản ba lớp:Làm thế nào để bỏ qua một cấp trong kế thừa gọi siêu từ ông bà trong java?

class A { 
    public A(int a){ } 
} 

class B extends A { 
    public B(int b){ super(b); } 
} 

class C extends B { 
    public C(int c){ super(c); } 
} 

Vì vậy, thứ tự thực hiện trong lớp instancing là C-> B-> A-> B-> C và tất cả các đối tượng được khởi tạo một cách chính xác. Sau đó, câu hỏi:

THỂ tôi một cách nào đó viết một constructor cho lớp C như thế này:

public C(int c){ 
    super.super(c); 
    } 

Ý tưởng là để gọi các nhà xây dựng từ A lớp, không phải từ cha mẹ B. ngay lập tức Đây có phải là có thể ?

+2

Vâng, không có phương pháp nào bị ghi đè ở đây, vì vậy chỉ cần gọi 'A (c) '. (Tôi cho rằng đây là lỗi đánh máy - hãy sửa mã của bạn để minh họa sự cố của bạn). –

+2

Mã này thậm chí sẽ không biên dịch vào lúc này, bởi vì bạn không khai báo các hàm tạo - bạn đang khai báo các phương thức có tên giống như các lớp. –

+1

A có nghĩa là trở thành nhà xây dựng, tôi đoán vậy. OP có lẽ nên suy nghĩ về kiến ​​trúc của mình, mặc dù. – Jeremy

Trả lời

10

Không, bạn không thể làm điều đó.

Tất cả các lớp học cần được xây dựng theo kiểu heirarchy. Bạn không thể bỏ qua việc xây dựng B.

Những gì bạn có thể làm là viết một constructor protected trong B đó là bản chất là một không-op, và gọi đó là từ các nhà xây dựng trong C.

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