如果一个类要实现一个接口,则必须实现该接口里面的所有的方法
Java 中的返回的类型是接口,但是接口是不能实例化,但是接口可以声明一个引用,指向其实现类,也就是说,在实际中返回值都是这个接口的实现类的对象。这点就是面向对象的一大特点。
记住一句话:属性看左边,方法看右边,比如:
interface a = new class1();
那么如果在接口和 class1里面都有一个同样的属性声明,比如在接口里面声明:int num=5; 在类里面同样声明了: int num=6;
那么:a.num=5,因为默认情况下,接口里面的属性都是用 public static final 修饰的,所以不能被其实现类去修改,当调用方法的时候,是看右边,
如:a.method(),那么调用的就是接口的实例化类里面的方法
Java 接口的引用(这里就是那个 a)其实就是借助于 创建一个实现该接口 的类 的对象(简单点就是借助一个对象),来对接口自身内部的属性和方法进行操作,当然这里的对方法的操作调用的是其实现类里面的具体实现的方法。用接口声明一个引用来指向其具体的实现类的对象的好处就是该引用只能调用实现类里面所包含的接口的方法,而不能调用除了接口里面的方法意外的只属于实现类的方法。我们都知道一个接口可以被不同的实现类所实现,当然这些不同的实现类在实现接口的方法的时候,所定义的具体的功能是不同的,所以一个接口的引用可以根据具体的要求来指向具体的实现类。但是它并不等同于其实现类 的对象,因为这个引用只能操作接口自身的属性和方法,而不能操作其实现类里面的除了接口方法以外的方法,
比如:
public interface A{
public void hello();
}
public class B implements A{
public void hello{
System.out.println("hello!");
}
public void test{
System.out.println("hello!");
}
public static void main(String[] args){
A a=new B();
a.hello();
a.test();
}
其中 a.hello(): 可以打印出 hello ,但是 a.test(); 则不能打印出 hello,那么如果想用 a 来调用 B 类里面的 test 方法,就需要做一个强制类型转换 (B(a)).test(); 转换为 B 类型的对象就可以对齐调用
用接口声明一个引用的好处是别人不知道你是如何实现该接口里面的方法的,也就是不知道接口的实现类 B 的源码,只能用接口的引用去调用 B 的方法实现相应的功能,就像汽车的发动机,你知道怎么用这个发动机,但是你不知道该发动机是如何用什么技术实现的。