关于接口有几点注意的
- 接口格式 interface 接口名 {}
- 实现接口的类 class 类名 implements 接口名 {}
- 接口实例化的方式:
通过实现接口的类,来实例化这个接口(动态多态) - 接口的子类
a、抽象类
b、具体类(实现接口中的所有抽象方法) - 接口里面的成员,只能是public static final的(接口中的mem虽然我们并没有public static final这样定义,但是还是public static final的)
- 接口里面的方法(但是本质上都是public abstract,比如说IMyFirstInterface中的func方法,细心的同学会发现,如果把鼠标移到func上,会发现它还是abstract)
a、abstract
b、default
c、static - 类与类,类与接口,接口与接口的关系:
类与类:
继承关系,只能单继承,可以多层继承。
类与接口:
实现关系,可以单实现,也可以多实现。
并且还可以在继承一个类的同时实现多个接口。
接口与接口:
继承关系,可以单继承,也可以多继承。 - 接口没有构造方法
为了加深读者对上面几点的理解,请看一个例子。
首先给出两个接口
public interface IMyFirstInterface
{
public static final int num=10;
int mem=12;
public abstract void fun();
void func();
}
public interface IMySecondInterface
{
int mem=11;
}
接口的单实现
public class ImplementsMyFirstInterface implements IMyFirstInterface
{
@Override
public void fun()
{
System.out.println("这是一条向北的通向罗马的路");
}
@Override
public void func()
{ }
}
接口的多实现:
public class ImplementsInterface implements IMyFirstInterface, IMySecondInterface
{
public ImplementsInterface()
{ }
@Override
public void fun()
{
System.out.println("这是一条往南通向罗马的路");
}
@Override
public void func()
{ }
}
再给出一个test类
public class Test
{
public static void main(String[] args)
{
// IMyFirstInterface first=new IMyFirstInterface();//接口不能直接实例化
ImplementsInterface first=new ImplementsInterface();
System.out.println(ImplementsInterface.num);
//System.out.println(ImplementsInterface.mem);//字段有歧义,两个接口中都有mem
first.fun();
System.out.println(first instanceof ImplementsInterface);
System.out.println(first instanceof IMyFirstInterface);
System.out.println(IMyFirstInterface.mem + "," + IMySecondInterface.mem);
System.out.println("================");
IMyFirstInterface f=new ImplementsInterface();
IMyFirstInterface m=f;
m.fun();
}
}