Java细节01——类与接口,继承与实现
就我们通常所知的——
类可以继承类,类可以实现接口,接口可以继承接口。
这些知识,没有任何特别,如下所示:
class A{
//一个类
}
interface AA{
//一个接口
}
class B extends A{
//一个类【继承】另一个类
}
class C implements AA{
//一个类【实现】一个接口
}
interface BB extends AA{
//一个接口【继承】一个接口
}
class D extends A implements AA{
//一个类【继承】一个类,同时【实现】一个接口
}
interface CC extends AA,BB{
//一个接口【继承】多个接口
}
(1)一个接口可以实现一个接口么?
标准Java中是不可以的,eclipse也会报错,但是在android提供的开发者文档中,确实有这样的情况存在。
//Java7手册中的ListIterator接口
public interface ListIterator<E> extends Iterator<E>
//Google Android Develop中描述
public interface ListIterator implements Iterator<E>
但是,事实上,在源码中使用的仍然是extends 而不是implements;
或许,此处可做进一步解读。
从第一个问题中,我们发现了一个新的领域,那么具有泛型的类又是怎样的呢?
//类 与接口:泛型篇
public class Test2 {
}
class A2<E>{
//使用泛型的类
}
class B2<E extends Number>{
//
}
class C2 extends A2{
//Warning:A2 is a raw type. References to generic type A2<E> should be parameterized
//编译器:A2 是原始类型. 泛型 A2<E>的引用应该被参数化
}
class D2<T> extends A2<T>{
//正确,泛型与名字无关
}
class E2 extends A2<E>{
//编译出错:E cannot be resolved to a type
//编译器:E 不能是一个类型
/* 此处解决方法有二种:
* 一种是对E2加上泛型描述符,
* 另一种是创建E的类,而这种方式实际上就是对于泛型的实现了
* 例如:class _E2 extends A2<Object>{}
* 是可以通过编译的。
*/
}
class F2<E> extends A2{
//这个与C2的情况一样
}
class G2<T> extends A2<E>{
//这是错误的情况,因为E丢失了
}
class _G2<T> extends A2<String>{
//同样的道理(见E2),这样却是可以的
}
class H2<E,T> extends A2<E>{
//泛型的扩充,也是可以的
}
/*-------------------------------------*/
class I2<E> extends B2<Number>{
//这也是实现+新泛型
}
class J2<T extends Number> extends B2<T>{
}
还有很多可以挖掘的地方,不过那应该在泛型的研究中去深挖,而此处就点到为止了...
接口的话,这里是类似的。