2012-04-16 42 views
5

Tôi đang làm bài tập về nhà cho lớp học lập trình của tôi liên quan đến việc triển khai giao diện. Vấn đề ở đây là tôi thực sự chỉ phẳng ra không hiểu giao diện hoặc những gì họ được sử dụng cho (giáo sư không phải là rất tốt về giải thích nó).Java - Thực hiện giao diện

Nhiệm vụ là tạo một siêu xe "Xe", và hơn ba lớp con, một cái gì đó như "Xe tải" hoặc "Xe Jeep" mà mỗi người sẽ có một vài đặc điểm riêng. Lớp "Xe" phải triển khai giao diện có thể so sánh, mà tôi nghĩ rằng tôi đã tìm ra (tôi có phương pháp compareTo() được viết so sánh số cửa trên xe) và một lớp khác cũng phải triển khai lớp "Hybrid" (tôi không có ý tưởng điều này có nghĩa là gì). Sau đó, chúng tôi phải triển khai các phương pháp toString(), equals(Object o)compareTo(Object o).

Tôi nghĩ rằng mình bị giảm compareTo(), nhưng với số equals() tôi không biết. Điều cuối cùng chúng ta phải làm là viết một Main để kiểm tra, điều này liên quan đến việc tạo ra một mảng các đối tượng Vehicle, in chúng ra, phân loại chúng, và sau đó in lại chúng. Nó cũng nên lặp qua mảng và in ra giá cao hơn cho các giống lai, và sử dụng phương pháp equals(Object o) để so sánh 2 Phương tiện.

Đây là mã cho "xe" của tôi cha

package vehicle; 

abstract public class Vehicle implements Comparable { 
    private String color; 
    private int numberOfDoors; 

    // Constructor 
    /** 
    * Creates a vehicle with a color and number of doors 
    * @param aColor The color of the vehicle 
    * @param aNumberOfDoors The number of doors 
    */ 
    public Vehicle(String aColor, int aNumberOfDoors) { 
     this.color = aColor; 
     this.numberOfDoors = aNumberOfDoors; 
    } 

    // Getters 
    /** 
    * Gets the color of the vehicle 
    * @return The color of the vehicle 
    */ 
    public String getColor() {return(this.color);} 
    /** 
    * Gets the number of doors the vehicle has 
    * @return The number of doors the vehicle has 
    */ 
    public int getNumberOfDoors() {return(this.numberOfDoors);} 

    // Setters 
    /** 
    * Sets the color of the vehicle 
    * @param colorSet The color of the vehicle 
    */ 
    public void setColor(String colorSet) {this.color = colorSet;} 
    /** 
    * Sets the number of doors for the vehicle 
    * @param numberOfDoorsSet The number of doors to be set to the vehicle 
    */ 
    public void setNumberOfDoors(int numberOfDoorsSet) {this.numberOfDoors = numberOfDoorsSet;} 

    @Override 
    public int compareTo(Object o) { 
     if (o instanceof Vehicle) { 
      Vehicle v = (Vehicle)o; 
      return this.numberOfDoors - v.getNumberOfDoors(); 
     } 
     else { 
      return 0; 
     } 
    } 

    /** 
    * Returns a short string describing the vehicle 
    * @return a description of the vehicle 
    */ 
    @Override 
    public String toString() { 
     String answer = "The car's color is "+this.color 
       +". The number of doors is"+this.numberOfDoors; 
     return answer; 
    } 
} 

Và tôi cũng sẽ gửi một trong những lớp con của tôi

package vehicle; 

abstract public class Convertible extends Vehicle { 
    private int topSpeed; 

    // Constructor 
    /** 
    * Creates a convertible with a color, number of doors, and top speed 
    * @param aColor The color of the convertible 
    * @param aNumberOfDoors The number of doors of the convertible 
    * @param aTopSpeed The top speed of the convertible 
    */ 
    public Convertible (String aColor, int aNumberOfDoors, int aTopSpeed) { 
     super(aColor, aNumberOfDoors); 
     this.topSpeed = aTopSpeed; 
    } 

    // Getters 
    /** 
    * Gets the top speed of the convertible 
    * @return The top speed of the convertible 
    */ 
    public int getTopSpeed() {return(this.topSpeed);} 

    // Setters 
    /** 
    * Sets the top speed of the convertible 
    * @param topSpeedSet The top speed to set to the convertible 
    */ 
    public void setTopSpeed(int topSpeedSet) {this.topSpeed = topSpeedSet;} 

    /** 
    * Returns a short description of the convertible 
    * @return a short description of the convertible 
    */ 
    @Override 
    public String toString() { 
     String answer = "The car's color is "+super.getColor() 
       +", the number of doors is "+super.getNumberOfDoors() 
       +", and the top speed is "+this.topSpeed+" mph."; 
     return answer; 
    } 
} 

Tôi chắc chắn không yêu cầu bất cứ ai để làm việc cho tôi, nhưng nếu ai đó có thể làm sáng tỏ một chút về cách giao diện hoạt động và bài tập về nhà này thực sự yêu cầu điều đó sẽ tuyệt vời như thế nào.

Tất cả trợ giúp được đánh giá rất nhiều

Cảm ơn!

+1

Giao diện về cơ bản là hợp đồng cho một lớp học. Nó nói rằng nếu bạn muốn gọi cho mình một 'Comparable', bạn cần phải thực hiện các phương thức này tạo nên một' Comparable'. –

+1

Giao diện chỉ là một cách để buộc các lớp học nhìn và hành xử theo cách được chuẩn hóa. Khi một giao diện định nghĩa một phương thức, mỗi lớp thực hiện giao diện đó phải ghi đè lên phương thức đó, điều này đảm bảo rằng lớp đó sẽ có phiên bản riêng của phương thức đó. – Hassan

+3

tôi hy vọng giáo sư ur sẽ không đọc câu hỏi này. :) – Dhananjay

Trả lời

12

Thay vì làm ví dụ cụ thể của bạn, tôi sẽ chạy qua lý do tại sao giao diện hữu ích và cách sử dụng chúng trong trường hợp tổng quát hơn.

Giao diện là gì?

Khi lần đầu tiên tôi bắt đầu lập trình, tôi cũng thấy khái niệm giao diện trở nên khó hiểu vì vậy tôi muốn nghĩ về nó như một "quy tắc sách" tiêu chuẩn. Mỗi lớp thực hiện quy tắc này có một danh sách các "quy tắc" nó phải tuân theo. Ví dụ: xem xét giao diện sau:

interface Bounceable{ 
    public void setBounce(int bounce); 
    public int getBounce(); 
} 

Quy tắc trên đây tuyên bố giao diện cho nội dung bị trả về. Nó nói rằng bất cứ điều gì đó là bounceable phải thiết lập thư bị trả lại của nó và cũng có được trả lại của nó. Bất kỳ lớp nào thực hiện giao diện này phải tuân theo quy tắc của sách.

Tại sao cuốn sách quy tắc này hữu ích?

Vâng, điều gì sẽ xảy ra nếu bạn muốn mã hóa sân chơi, nơi trẻ em chơi với tất cả những thứ bouncy. Bạn có thể làm những điều sau đây bouncy ..

public class FootBall implements Bounceable{ 
private int bounce; 

public void setBounce(int bounce){ 
    this.bounce = bounce; 
} 

public int getBounce(){ 
    return this.bounce; 
} 

} 

public class BaseBall implements Bounceable{ 
private int bounce; 

public void setBounce(int bounce){ 
    this.bounce = bounce; 
} 

public int getBounce(){ 
    return this.bounce; 
} 

} 

Các lớp trên xác định loại bóng bouncy. Sau đó bạn sẽ làm cho lớp sân chơi của bạn và có thể xác định các phương pháp xung quanh giao diện Bounceable trừu tượng.Ví dụ, nếu một vòng bóng rổ là một phương pháp trong lớp học của bạn thì sao? nếu nó có thể chấp nhận bất kỳ điều bouncy như một đối số? Điều này có nghĩa là bạn có thể vượt qua bất kỳ loại nào loại bóng miễn là nó có thể bounceable được. Nếu bạn không có giao diện hoặc chức năng tương tự, bạn có thể thấy mã lộn xộn của bạn sẽ nhận được nhiều quả bóng hơn bạn thực hiện như thế nào.

EDIT: tôi đã bao gồm một ví dụ thực tế nhỏ ..

Một ví dụ thực tế của điều này sẽ là ..

public void slamDunk(Bounceable bouncyThing){ 
    System.out.println("You scored three points!"); 
} 

Cả hai của các cuộc gọi sau đây để Slamdunk có giá trị ...

slamDunk(new BaseBall()); 

slamDunk(new FootBall()); 

Bây giờ, chức năng slameDunk của bạn có thể ghi điểm với bất kỳ vật thể nảy.

+0

cảm ơn bạn, điều này là hữu ích – salxander

+0

Cảm ơn ví dụ này, câu trả lời sâu sắc của bạn đã thực sự giúp đẩy tôi hơn nữa trong bài tập – salxander

0

Các giao diện Comparable được mô tả trong the docs http://docs.oracle.com/javase/6/docs/api/java/lang/Comparable.html và có chữ ký:

int compareTo(T o) 
Compares this object with the specified object for order. 
Returns a negative integer, zero, or a positive integer as this object is less than, 
equal to, or greater than the specified object. 

nếu bạn viết:

public class Vehicle implements Comparable { 
//... 
} 

và sau đó cố gắng để biên dịch nó, bạn sẽ nhận được một lỗi . Giao diện yêu cầu bạn phải có phương thức compareTo(). Bạn phải viết nó, và nó phải trả về một giá trị số nguyên. Điều này sẽ là dương, âm hay bằng không cho dù chiếc xe là "lớn hơn", "nhỏ hơn" hoặc bằng một chiếc xe khác. BẠN quyết định những gì "lớn hơn" có nghĩa là - nó có thể là khối lượng, tuổi tác, giá trị hay bất cứ điều gì. Đó là giá trị của giao diện - nó nói những gì bạn phải làm, nhưng không phải cách bạn phải làm.

Vì bạn muốn tự làm điều này, tôi khuyên bạn nên làm theo bất kỳ hướng dẫn nào về So sánh.

0

Như những người khác đã nói, một giao diện giống như một hợp đồng cho một lớp học. Khi một lớp thực hiện một giao diện, nó tuyên bố hành xử theo một cách nào đó (ví dụ khi lớp của bạn triển khai Comparable, nó có thể được so sánh với các đối tượng khác và thỏa mãn hợp đồng này bằng cách thực hiện phương thức compareTo.)

như rắc rối của bạn không phải là với giao diện - bạn đã thực hiện Comparable. Bạn nên kiểm tra null trong số compareTo của mình.

Bạn hỏi về khoảng equals(Object o). Điều đó thậm chí còn dễ dàng hơn compareTo(Object o) - cần phải trả lại true khi đối tượng bạn so sánh giống với đối tượng này và false khi không phải. (Hãy cẩn thận và nhớ kiểm tra lại null - nếu onull bạn nên trả về false).

Ngoài ra, bạn hỏi về toString(), nhưng bạn đã triển khai toString() trong mã của mình. Nhận xét duy nhất là một phân lớp cụ thể 'toString() có lẽ nên đề cập đến một cái gì đó đặc biệt về nó (ví dụ: đó là một chuyển đổi hoặc lai ...)

+0

Cảm ơn sự giúp đỡ! – salxander

0

(Trong kịch bản dưới đây nghĩ của mỗi danh từ như là một lớp (một số tài sản thời gian) trong chương trình và mỗi động từ như phương pháp của một lớp)

Bạn đang xây dựng một Robot. Bạn đã làm những điều dưới đây trên Robot 1. 2 Cảm biến mắt, 2 tay, 2 chân và Đầu (chiều cao robot = 2m) 2. Để giao tiếp với rô-bốt này, bạn lấy 10 dây ra khỏi đầu, 10 dây ra khỏi chân và 13 dây từ tay.

Và logic là nếu dây đầu số 1 gia nhập dây chân số 2 thì rô bốt sẽ đi. Nếu dây số 9 trong tay tham gia đầu dây số 4 và dây 1 của đầu tham gia dây 6 của tay thì cả hai tay sẽ đi lên .... vv. Lưu ý IMP - dây 3 trên đầu không bao giờ chạm vào dây 5 trên chân. Mọi thứ sẽ thổi ngược lại.

Giao diện thật là gì huh!

Và bây giờ hãy tưởng tượng điều này phải được trao cho ai đó nhìn thấy Robot lần đầu tiên. Bây giờ hãy nghĩ xem robot này sẽ được sử dụng như thế nào.


Trên ghi chú tương tự khi bạn tạo lớp, bạn nên quản lý cách sử dụng chương trình khác. Bạn có muốn có các trường công cộng (int và chuỗi) có sẵn cho các chương trình khác hoặc bạn muốn các hàm đơn giản sẽ xử lý tất cả các logic số nguyên phức tạp đó.

Giao diện cung cấp cách dễ dàng để giao tiếp giữa 2 lớp và trong khi làm điều đó, các em không phải lo lắng về những gì sẽ xảy ra với những thứ khác trong lớp của mình.

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