confused about JAVA interface
Possible Duplicate:
What does it mean to"program to an interface"?
Interface vs Abstract Class (general OO)
我是新来学习Java的,现在我对界面感到困惑。我搜索和阅读了很多资料,但还是不清楚。
当我试图找到一些关于接口的信息时,我看到许多人谈论接口和抽象类之间的关系。但我甚至不知道他们为什么要对比这两个。因为我认为抽象类是用来告诉其他人你不能创建这个抽象类的对象,如果你愿意,你必须修改抽象类。这和继承有关,对吧?
但我不知道接口的含义。有一个
那么,有没有人能给我举几个例子让我理解界面?或者你可以告诉我一些有用的链接或者那些描述界面的书。我真的希望能弄明白。谢谢您!
假设你有一个与现实生活无关的
例如:用电动泵清洗
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | interface Washable { public void wash(); } public class Car implements Washable { public void wash() { // wash the car with a power pump } } public class Vegetable implements Washable { public void wash() { // wash the vegetable under a kitchen sink } } |
作为一个人,你不仅要洗蔬菜,还要洗汽车。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | public class Person { Washable washableObject = new Car(); washableObject.wash(); washableObject = new Vegetable(); washableObject.wash(); } |
因此,接口是一种连接具有共同行为的无关类的方法,但是这种行为将以不同的方式实现,或者在将来可以更改。
有一天,你决定改变洗车的方式。假设你买了一台"洗车机"。因此,在
公车工具可洗{
1 2 3 4 5 | public void wash() { // wash the car with my new car washing machine !! } |
}
但作为一个人,你仍然称之为
希望你明白我们现在为什么使用
理解接口和类的简单代码。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | import java.util.List; import java.util.ArrayList; public class Q01 { List<Shape> shapes= new ArrayList(); public void add() { shapes.add(new Square(3.0)); shapes.add(new Circle(2.0)); } public void print() { for (int i = 0; i < shapes.size(); i++) { Shape shape = shapes.get(i); System.out.println(shape.getClass().getSimpleName() +" --->" + shape.getArea()); } } public static void main(String[] args) { Q01 q01= new Q01(); q01.add(); q01.print(); } public interface Shape { double getArea(); } public class Square implements Shape{ private double edge; public Square(double edge) { this.edge = edge; } public double getArea() { return edge*edge; } } public class Circle implements Shape{ private double radius; public Circle(double radius) { this.radius = radius; } public double getArea() { return 3.14 * radius * radius; } } } |
假设您了解类继承,我认为接口类似于一个骨架类,其中描述了类的结构,但实际上并没有编写/实现。
然后,另一个类可以与实现特定接口的任何类一起工作,即使该接口尚未实现。
例如,有人可以创建一个名为
UPD
一个很好的现实例子是JDBC数据库语句接口。这列出了数据库制造商必须实现的一些必需属性,例如
在接口中思考,比如类和用户之间的契约。当一个类实现一个接口时,它告诉我们它承诺提供由该接口定义的所有方法。
基本上,
这意味着你可以有两个完全独立的类A和B,除了