接口
这里直接给出定义方式(关于概念,先把它当作是一个抽象类,确实有些类似,但是略有不同,抽象类概括的是某物的本质,接口是某物外的性质)
public interface 接口名称{
抽象方法……
}(所以接口不能实例化对象,抽象方法了)
接口里面的成员变量其实是常量,声明方式为: public static final int i = 1;如果不书写
public static final,其实默认也是书写的,但是为了规范代码,在定义成员变量的时候还是这么做吧。
接口里面同样可以定义方法,但是
只能是抽象方法,声明方式为:
public abstract 返回值类型 方法名(给定参数类型 参数名),同上边一样,即使声明中只有 void method(), 默认public abstract。接口里面就public行得通,可以这么记忆。
类与接口的关系
类可以
实现接口,关键字implements,
格式:
class 类 implements 接口名{
重写接口的抽象方法
}
注意:定义的类必须重写所有接口的抽象方法之后,才可以实例化使用,不然会该类还是抽象类的(这点跟抽象类的继承类似)
接口也可以多实现
interface Fu1
{
void func1();
}
interface Fu2
{
void func2();
}
class Zi implements Fu1,Fu2// 实现多接口。
{
public void func1(){}
public void func2(){} //再次注意重写方法,去掉abstract,补充方法体
}
还有其它组合,例如子类继承父类,父类再实现接口
class Fu {
public void func(){}
}
interface jiekou {
pulbic abstract void newFunc();
}
class Zi extends Fu implements jiekou {
public void newFunc() {
} //这样子类重写的接口方法就可以调用了,还可以使用父类func方法的功能
}
接口与接口之间的关系,其实也是继承,对比类不同的是,接口之间的继承,是可以多继承的(因为是抽象方法的缘故,子类实现不会发生找不到重写后的抽象方法)。
interface Fu1{
void func1();
}
interface Fu2{
void func2();
}
interface Fu3{
void func3();
}
interface Zi extends Fu1,Fu2,Fu3{
void func();
}
小结,类与接口的相互关系
类与类的关系:继承 ,可以多层继承,但是不允许多继承,类可以是抽象类,然后涉及到抽象方法及子类重写的问题。
类与接口的关系:实现 ,除了一个类实现接口,可以再类继承的关系上实现接口,而且是实现多个接口
接口与接口关系:继承,可以多继承。