来源:网络 | 2007-4-19 | (有5100人读过)
1) 接口是抽象类的另外一种形式(没有实例变量的抽象类); 2) 在一个接口中所有方法都是抽象方法; 3) 接口中所有变量都必须被定义为final static; 4) 接口可以继承多个接口。 5) 可插入性的保障――工程模式 6) 是规范的制订者和规范的实现者分开。――JDBC 注:1) 接口中的方法自动被置为public, 因经,在接口中声明方法并不需要提供public关键字。但在实现接口时,必须把方法声明为public。
接口与抽象类的区别: 接口 抽象类 无实现方法 可以有非抽象方法――实现代码 可以把子类的共有代码 提取出来放在抽象类中
在JAVA中的接口分类: 普通 -----有方法和属性 常量 -----存常量 标记 -----没有方法,属性,只为了做编译类型的标记 实例: 简单工厂模式(接口和多态的实际使用) public interface Car { public void brake(); public void grade(); public void engineer();
} public class BMW implements Car{ private String name;
public String getName() { return name; } public void setName(String name) { this.name = name; } public void brake() { // TODO Auto-generated method stub System.out.println("BMWcar’s brake()"); } public void engineer() { // TODO Auto-generated method stub System.out.println("BMWcar’s engieer()"); } public void grade() { // TODO Auto-generated method stub System.out.println("BMWcar’s greade()"); } /** * @param args */ } Public class Banz implements Car{ …… } Public class Factory{ Public static Car factory(String name){ If(name.equals(“BMW”){ Return new BMWCar(); //返回一个引用 } If(name.equals(“Banz”){ Return new BanzCar(); } } } 注意: 1 这个问题不是对象有没有toString方法的问题,而是用接口作为编译时类型能否调用的问题. 2 接口就是接口,尽管本质上是抽象类,但是总归不是类,接口没有父类,Object类绝不是接口的父类,这种理解大错而特错!!!
3.我们来看看虚拟机规范是怎么说的 JVM会解析类型为CONSTANT_InterfaceMethodref_info的常量池的入口,会按照如下步骤执行接口方法解析: 1) 检查接口是否具有用户调用的方法 2) 检查接口的父接口是否具有用户调用的方法 3) 检查java.lang.Object是否具有用户调用的方法 4) 抛出NoSuchMethodException
因此,不是接口类型有toString方法,用反射是看不到这个方法的,而是虚拟机在作方法调用连接时,会自动去找Object类中的方法.虚拟机就是这么工作的.
所以,对以接口作为编译时类型的方法调用,根据以上说的第三点,Object类中的方法都可以得到调用。
|