当一个类中的方法全是抽象方法时,这时可以将该抽象类用另一种定义和表示,就是接口,用interface修饰。既然接口是一个类,方法全是抽象的,那属性呢?
interface Person1{
public static final int NUM=0;//初始年龄为0
public abstract void study(); //学习的内容不具体,在java中一行的结束符为}或;
}
class Programmer implements Person1{
public void study(){
System.out.print("study c++....");
}
}
public class IterfaceDemo {
public static void main(String[] args) {
Programmer stu=new Programmer();
stu.study();
System.out.print("x="+Person1.x);
}
}
由上可以看出接口中的属性值是全局常量,而且是静态,公有的。在接口中的修饰符,全局常量:public static final 抽象方法:public abstract
类与类之间是继承关系,类与接口之间是实现关系。接口不可以实例化,只能由实现的子类覆盖其所有的抽象方法后才可以实例化,否则这个类还是抽象类。
interface Demo{
public static final int NUM=0;
public abstract void show();
public abstract void method();
}
class DemoImpl implements Demo{
public void show(){
System.out.print("show...");
}
public void method(){
System.out.print("method...");
}
}
public class IterfaceDemo {
public static void main(String[] args) {
DemoImpl d=new DemoImpl();
d.show();
d.method();
System.out.print(d.NUM);//The static field Demo.NUM should be accessed in a static way
System.out.print(DemoImpl.NUM);
System.out.print(Demo.NUM);
}
}
那么接口是用来做什么的呢?有学习继承的时候,一个类只能继承一个类,不能多继承,有一定的局限性,由于接口的出现,一个类可以实现多个接口, 可以多实现,而接口与接口之间也可以q多继承,多继承在类进行了改良,用了多实现的方法来体现,但接口内容的出现,可以多继承,原理在于方法体是否存在
interface AA{
public abstract void show();
}
interface BB{
public abstract void method();
}
interface CC extends AA,BB{
public abstract void function();
}
class WW implements CC{
public void show(){
System.out.print("show .....");
}
public void method(){
System.out.print("method .....");
}
public void function(){
System.out.print("function .....");
}
}
public class IterfaceDemo {
public static void main(String[] args) {
WW w=new WW();
w.show();
w.method();
w.function();
}
}
由此可以看出,接口之可以多继承,继承是自己不需要做,拿父类的方法可以直接用,而实现则需要子类全覆盖所有的抽象方法。