• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

Tại sao không thể khai báo Interface trong Inner Class?

Nơi trao đổi, hỏi đáp về hướng đối tượng (OOP - Object-Oriented Programming), không giới hạn về ngôn ngữ lập trình
Hình đại diện của người dùng
vo_minhdat2007
Quản trị
Quản trị
Bài viết: 2227
Ngày tham gia: CN 17/07/2005 1:40 am
Has thanked: 13 time
Been thanked: 87 time
Liên hệ:

Tại sao không thể khai báo Interface trong Inner Class?

Gửi bàigửi bởi vo_minhdat2007 » T.Ba 23/08/2011 11:03 pm

Về nguyên tắc thì môi trường nào cũng quy định như vậy, VD như Java:

According to JLS: 8.1.3 Inner Classes and Enclosing Instances, inner classes may not declare static initializers or member interfaces. Inner classes may not declare static members, unless they are compile-time constant fields.

According to 8.5.2 Static Member Type Declarations, "Member interfaces are always implicitly static. It is permitted but not required for the declaration of a member interface to explicitly list the static modifier". They are always top-level, not inner.


Tại sao lại như vậy? Có điều gì mâu thuẫn xảy ra hay không nếu chúng ta được phép khai báo Interface trong Inner Class?



eureka287
Thành viên chính thức
Thành viên chính thức
Bài viết: 17
Ngày tham gia: T.Tư 25/06/2008 10:06 am
Đến từ: Miền Đông Nam Bộ
Liên hệ:

Re: Tại sao không thể khai báo Interface trong Inner Class?

Gửi bàigửi bởi eureka287 » CN 04/09/2011 1:00 am

Chào bạn,

Mình có google và thấy bạn có đặt câu hỏi tương tự ở stackoverflow. Thật ra mình không hề biết câu trả lời kỹ thuật cho câu hỏi này, nhưng theo suy nghĩ của mình thì xét về khía cạnh quản lý code thì viết một interface trong một inner class nó sẽ hại nhiều hơn lợi, và khiến code rất rối rắm.

Ví dụ:
(code này không biên dịch được)
  1. public class Car {
  2.     class Part{
  3.         public interface IControl{
  4.             void Spinning()
  5.         }
  6.  
  7.         class Wheel implement IControl{
  8.            
  9.         }
  10.     }
  11. }


Tức là khai báo 1 interface ở trong 1 Inner Class thì mình nghĩ là chỉ được dùng lại Interface đó trong Inner Inner Class. Như vậy code sẽ trở nên khó đọc và nếu có lỗi xảy ra thì khó debug.

Đó là ý kiến chủ quan của mình.

phool
Bài viết: 1
Ngày tham gia: T.Bảy 10/01/2015 5:48 pm

Re: Tại sao không thể khai báo Interface trong Inner Class?

Gửi bàigửi bởi phool » T.Bảy 10/01/2015 5:53 pm

ý anh là cách sử dụng đó, nhưng không biết có giống hông vì chưa sử dụng nó
adil

robertle
Bài viết: 2
Ngày tham gia: T.Năm 12/03/2015 11:17 am
Liên hệ:

Re: Tại sao không thể khai báo Interface trong Inner Class?

Gửi bàigửi bởi robertle » T.Năm 12/03/2015 11:30 am

Đó là do giới hạn ràng buộc của trình biên dịch (như Java compiler) thôi bạn


Quay về “Lập trình hướng đối tượng (OOP)”

Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.2 khách