public class A implements B{}
A 是类名,implements是实现B与java之间的接口.
implements是一个类实现一个接口用的关键字,是用来实现接口中定义的抽象方法。
比如:people是一个接口,里面有say这个方法。
public interface people(){ public say();}但是接口没有方法体。
只能通过一个具体的类去实现其中的方法体。
比如chinese这个类,就实现了people这个接口。
public class chinese implements people{ public say() {System.out.println("你好!");}}
在java中implements表示子类继承父类,如类A继承类B写成 class A implements B{}
与Extends的不同
extends, 可以实现父类,也可以调用父类初始化 this.parent()。
而且会覆盖父类定义的变量或者函数。
这样的好处是:架构师定义好接口,让工程师实现就可以了。整个项目开发效率和开发成本大大降低。
implements,实现父类,子类不可以覆盖父类的方法或者变量。即使子类定义与父类相同的变量或者函数,也会被父类取代掉。
这两种实现的具体使用,是要看项目的实际情况,需要实现,不可以修改implements,只定义接口需要具体实现,或者可以被修改扩展性好,用extends。
s = (Item[]) new Object[1];
这里,为什么不能直接用 s = new Item[1]; ?
Java编程思想上解释为类型擦除。
我的理解:
Item是某个类型,该类型在未创建泛型类时,是不确定的(不知道是那个class类),Java中的new对象必须是明确已知的对象,就是说必须要有class文件与之对应,而这里你直接new Item[1],Item对应哪个class文件JVM并不知道,所以是不对的;但Item是一个类型这一点是确定的并且只能是一种类型,而Java支持类型转换,你可以将某个类型强制转换为另一种类型,所以s = (Item[]) new Object[1];是可以的,也是唯一的方式。