2010-12-14 38 views
18

Bản sao có thể xảy ra:
Abstract class and Interface class?
Java: interface/abstract classes/abstract methodviệc sử dụng giao diện thực tế trong java là gì?

Trong Java, bất kể sử dụng giao diện được thực hiện bởi lớp trừu tượng. Tôi biết một lợi thế của giao diện là nếu chúng ta thực hiện một giao diện thì chúng ta cũng có thể mở rộng một lớp khác. Có sử dụng hoặc lợi thế nào khác của giao diện trong Java không?

+1

Câu hỏi này đã được hỏi nhiều lần trước đây, trong các vỏ bọc khác nhau. –

+0

Để thực hiện một giao diện, tất cả các phương thức được định nghĩa bởi giao diện đó phải xuất hiện trong mã nguồn của nó trước khi lớp sẽ biên dịch thành công. Giao diện theo cách này cho phép một lớp trở nên chính thức hơn về hành vi mà nó hứa hẹn sẽ cung cấp. –

Trả lời

23

gì bạn thích: hàng ngàn phương pháp trừu tượng trong một Abstract Class và kế thừa lớp này HOẶC thực hiện càng nhiều giao diện cho các phương pháp trừu tượng cụ thể và sử dụng những chỉ bạn muốn bằng cách kế thừa nhiều giao diện khi cần thiết ...

abstract class A 
{ 
//thousands of abstract method(); 
abstract methodA(); 
abstract methodB(); 
abstract methodC(); 
} 

//OR 
interface ForOnlymethodA 
{ 
void methodA(); 
} 
interface FormethodBandmethodC 
{ 
void methodB(); 
void methodC(); 
} 

Vì vậy, chỉ sử dụng phương pháp đó bằng cách kế thừa giao diện cụ thể, nếu bạn đang kế thừa các lớp Abstract thì bạn không cần thừa kế tất cả các phương thức mà bạn không cần trong một lớp và có thể cần thiết trong một số lớp khác ..

7

Nhiều giao diện có thể được triển khai nhưng chỉ có thể mở rộng một lớp. Một lớp trừu tượng hoàn toàn giống như một giao diện, ngoại trừ một lớp trừu tượng có thể chứa các biến.

Nó thực sự phụ thuộc vào những gì bạn cần. C++ cho phép bạn mở rộng bao nhiêu lớp bạn muốn, và nó biến thành một chút thảm họa. Điều tốt đẹp về việc chỉ có một siêu lớp là chỉ có một bộ triển khai khác mà bạn phải lo lắng (ngay cả khi cha mẹ có cha mẹ, kết hợp cụ thể của cha mẹ trở thành cha mẹ của bạn ...)

Giao diện cho phép một đối tượng để chơi nhiều vai trò, nhưng chúng không cho phép sử dụng lại mã.

Thực sự đơn giản hóa suy nghĩ về kế thừa. Trên số dư, tôi nghĩ họ đã đúng.

+0

nhờ cung cấp thông tin giá trị. – kandarp

1

Giao diện cho phép nominative typing trong Java tới hoạt động trên tách rời class hierarchies.

Điều này là do giới hạn "inheritance" duy nhất trên phân cấp lớp và "loại đóng". Tôi sẽ giữ lưỡi của tôi trên subtype polymorphism và thực hiện Java của nó ;-)

Có những giải pháp khác cho vấn đề này như gõ năng động, gõ cấu trúc, đa thừa kế, và đặc điểm, vv Mỗi phương pháp đều có ưu điểm và lợi thế . Giao diện chỉ là cách tiếp cận mà Java đã thực hiện.

+0

nhờ trả lời bài viết của tôi – kandarp

0

Giao diện Java - cung cấp data encapsulation có nghĩa là, việc triển khai các phương pháp không thể xem được. Lớp mở rộng giao diện này phải thực hiện tất cả các phương thức được khai báo trong nó.

thông tin khác: wiki answer

0

Ưu điểm so với lớp trừu tượng? ngoại trừ thực tế bạn có thể triển khai nhiều giao diện nhưng chỉ mở rộng một lớp (trừu tượng hoặc không), nó giống như một lớp trừu tượng mà tất cả các phương thức của nó là trừu tượng và công khai

51

Giao diện cho phép bạn sử dụng các lớp trong các hệ thống phân cấp khác nhau, polymorphically .

Ví dụ, nói rằng bạn có giao diện sau:

public interface Movable { 
    void move(); 
} 

Bất kỳ số lượng các lớp học, trên phân cấp lớp có thể thực hiện Movable theo cách cụ thể riêng của họ, nhưng vẫn được sử dụng bởi một số người gọi trong một bộ đồng phục đường.

Vì vậy, nếu bạn có hai loại sau đây:

public class Car extends Vehicle implements Movable { 
    public void move() { 
     //implement move, vroom, vroom! 
    } 
} 

public class Horse extends Animal implements Movable { 
    public void move() { 
     //implement move, neigh! 
    } 
} 

Từ góc nhìn của người gọi, nó chỉ là một Movable

Movable movable = ...; 
movable.move(); //who am I? 

Tôi hy vọng điều này sẽ giúp.

+1

nhờ giúp tôi hiểu sự khác biệt giữa giao diện và trừu tượng với ví dụ thích hợp. – kandarp

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