这里讲述的都是接口的基本语法知识,要想真正理解,还是得在处理实际问题的过程中体会。
接口的定义:抽象方法和常量值的集合。
格式:(public) interface interfaceName (extends SuperInterfaceList)
{
......//对常量的定义和抽象方法的定义
......//常量属性默认为:public static final;抽象方法默认为:public abstract
}
接口的语法中要注意以下5点:
1、接口中的默认属性必须是public static final,抽象方法默认必须是public abstract,这些修饰符基本上都可以省略。
interface It1 {
public static final int i = 10; //默认为 public static final
public abstract void f (); //默认为 public abstract
void g ();
}
interface It2 {
int i = 10; //默认为 public static final
void f (); //默认为 public abstract
void g ();
}
2、类不能继承接口(因为不是同一种事物),只能实现(
implements)接口;在实现过程中,要注意:(1)若一个类只实现(重写)了一个接口的部分方法,那么这个类必须声明为
abstract;(2)重写方法时,必须写
public【由接口的默认设置导致】。
//class A extends It {} //error,接口并不是类,不可以被类继承,但可以被实现
//class A implements It {} //error,实现时,如果只重写了接口中的部分方法,那么必须声明为 abstract类【由接口的默认设置public abstract导致】
//下面的两个实现阐明了上面的问题
abstract class A implements It1 {
}
abstract class B implements It1 {
public void f() { //修改时必须是public类型【由接口的默认设置public abstract导致】
}
}
class C implements It1 { //此时,class的类型可以由自己设置
public void f() {
System.out.println("通过接口可实现多继承。");
}
public void g() {
}
3、接口可以继承接口,且可以继承多个,即多继承。
interface It extends It1,It2 { //接口可以继承多个接口,即多继承
}
4、一个类可以在继承一个父类的同时实现多个接口,这样加上3就可以实现多继承。
class E extends C implements It1, It2 { //可在继承一个父类的同时实现多个接口,从而实现一定程度上的多继承
}
5、不可以new接口对象,但可以定义一个
接口类型的变量并将其指向实现接口的对象,达到多态的目的。
public class TestInterface {
public static void main(String[] args) {
// TODO Auto-generated method stub
//It1 it = new It1(); //不可以new接口
It1 it;
it = new C ();
it.f();
}
}
/*运行结果:
* 通过接口可实现多继承。
* */
接口的基本语法相对较多,不过基本上都是基于其默认设置public static final 和 public abstract而得来的,理解并逻辑的去记忆,更深入的理解则需要在实际应用中体会。