Bây giờ ta có 1 khái niệm mới, là giao diện. Giao diện ra đời chính là để giải quyết đa kế thừa. Mỗi lớp trong Java chỉ có 1 lớp cha, nhưng có thể implements nhiều giao diện.
Giao diện được khai báo giống như 1 lớp, cũng có state và behavior. Nhưng state của giao diện là final còn behavior là abstract
Giả sử, ta sẽ khai báo một giao diện

1
2
3
4
5
6
7
8
9
10
public interface Product {
    // hai state duoi day la final, tuc la lop implements khong duoc phep doi
    // gia tri
    static string maker = "My Corp";
    static string phone = "555-7767";
    // behavior duoi day la abstract, tuc la khong co noi dung
    public int getPrice(int id);
}


Bây giờ, ta sẽ viết một class có cài đặt (implements) giao diện này:

1
2
3
4
5
6
7
8
9
10
11
public class Shoe implements Product {
    public int getPrince(int id)
                {
                                return (id= =1)?5:10;
                }
    public String getMaker() {
        return maker;
    }
}


Muốn implements nhiều giao diện, làm như sau, ví dụ class Toyota extends Car implements ActionCar, ActionMobilation

package-unit
Hãy tạo 1 thư mục có tên là Transport
Bên trong thư mục này hãy tạo 2 file là Car.java và Bicycle.java như sau

Car.java

1
2
3
4
5
6
7
package Transport;
public class Car {
    public String manufacturer;
    public int year;
}


Bicycle.java
1
2
3
4
5
6
7
8
9
10
package Transport;
public class Bicycle {
    public int cost;
    public Bicycle(int cost) {
        this.cost = cost;
    }
}


Như vậy là ta đã tạo ra 1 gói chứa 2 lớp là Car và Bicycle. Bây giờ ta có 1 chương trình muốn sử dụng gói này là TestProgram.java. Ta viết:
ViDuTransport.java

1
2
3
4
5
6
7
8
9
10
import Transport.*;
class TestProgram {
    public static void main(String args[]) {
        Car myCar = new Car();
        myCar.manufacturer = "Toyota";
        Bicycle myBicycle = new Bicycle(1500);
    }
}


Lưu ý nếu trong file ViDuTransport bạn không khai báo import Transport.* thì bạn vẫn có thể khai báo tường minh như sau
Transport.Car myCar = new Transport.Car();