`
atmosphere
  • 浏览: 14121 次
  • 性别: Icon_minigender_1
博客专栏
807a8b01-317a-34bf-9d0f-011a7c5a74b4
javase7官方教程翻译...
浏览量:10675
社区版块
存档分类
最新评论

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

阅读更多

在你的类声名中包含一个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的实例.

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics