欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JAVASE官方教程:接口之实现接口(3)

程序员文章站 2022-04-16 12:17:28
...

在你的类声名中包含一个implements子句用来实现一个接口.一个类可以在implements关键字后跟一个以逗号分隔的接口列表来实现多个接口

.按照惯例,implements子句跟在extends子句后(如果有).

一个例子,Relatable:

public interface Relatable {
	
   // this (调用isLargerThan的对象)和
   // other 必须是相同类的实例
   // 返回 1, 0, -1 如果this大于,
   // 等于,小于other
   public int isLargerThan(Relatable other);
}

 

 

如果你想比较两个相似对象的大小二不管他们真正是什么,那么这个类必须实现了Relatable然后实例化他们.

如果你想要一种比较对象之间的"大小",那么任意类都可以实现它.对于字符串,"大小"可能指的是字符数;对于书来说,它可能指书的页数等等.所有这样的类都可以实现isLargerThan()方法.

如果你知道了某个类实现了Relatable,那么你就知道你可以比较这个类的两个实例的大小.

 

实现Relatable接口


这儿有一个矩形类:

public class RectanglePlus implements Relatable {
    public int width = 0;
    public int height = 0;
    public Point origin;

    // 四个构造方法
    public RectanglePlus() {
	origin = new Point(0, 0);
    }
    public RectanglePlus(Point p) {
	origin = p;
    }
    public RectanglePlus(int w, int h) {
	origin = new Point(0, 0);
	width = w;
	height = h;
    }
    public RectanglePlus(Point p, int w, int h) {
	origin = p;
	width = w;
	height = h;
    }

    // 移动矩形的方法
    public void move(int x, int y) {
	origin.x = x;
	origin.y = y;
    }

    // 计算面积
    public int getArea() {
	return width * height;
    }
    
    //实现Relatable接口所需要的方法
    public int isLargerThan(Relatable other) {
    	RectanglePlus otherRect = (RectanglePlus)other;
    	if (this.getArea() < otherRect.getArea())
    		return -1;
    	else if (this.getArea() > otherRect.getArea())
    		return 1;
    	else
    		return 0;    		
    }
}

因为RectanglePlus实现了Relatable接口,所有两个RectanglePlus对象是可以比较大小的.

 

注意:isLargerThan方法接受一个Relatable类型.

RectanglePlus otherRect = (RectanglePlus)other;

这行代码将other转换成RectanglePlus实例.类型转换告诉编译器这个对象真正是什么.直接调用other.getArea()会失败,因为编译器不知道other是RectanglePlus的实例.