2010-04-21 55 views
7

Tôi hy vọng mã này giải thích các vấn đề:Làm thế nào để truy cập một phương thức siêu lớp từ một lớp lồng nhau?

class Foo { 
    void a() {/*stuff */ } 
} 

class Bar extends Foo { 
    void a() { throw new Exception("This is not allowed for Bar"); } 

    class Baz { 
     void blah() { 
      // how to access Foo.a from here? 
     } 
    } 
} 

tôi biết rằng tôi có thể làm điều gì sai, vì thừa kế có lẽ không nên được sử dụng theo cách như vậy. Nhưng đó là cách dễ nhất trong tình huống của tôi. Và, bên cạnh đó, tôi chỉ tò mò thôi. Có thể không?

Trả lời

16

Bar.super.a() dường như hoạt động.

mỗi JLS section 15.12

ClassName. siêu . NonWildTypeArguments_opt Mã định danh (ArgumentList_opt)

là một phương thức hợp lệ

3

Bạn có thể gọi bất kỳ phương thức nào từ lớp bên ngoài với Outer.this.method().

Nhưng phương pháp được giải quyết trong thời gian chạy, vì vậy nếu bạn đã ghi đè nó trong lớp con của mình, chỉ có phương thức lớp con (Bar.a()) mới có thể truy cập bản gốc (bằng cách gọi super.a()).

Như bạn có thể phát hiện, bạn không thể viết Bar.this.super.a() - nhưng ngay cả khi bạn có thể, nó vẫn sẽ cung cấp cho bạn Bar.a(), không phải Foo.a().

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