目录
接口
定义接口
public interface MyInterFace { //class->interface
//抽象方法
public abstract void absMethod(); //抽象方法必须被实现类覆盖重写,用实现类对象调用;public abstract可省略
Character absMethod2(String name); //返回值,参数类型可变
//默认方法
public default void defaultMethod1(){ //default method可直接被实现类对象调用,也可被覆盖重写
System.out.println("这是默认方法1");
privateMethod(); //调用普通私有方法
}
default void defaultMethod2(){ //d method可解决接口升级问题,public可省略
System.out.println("这是默认方法2");
}
//静态方法
public static void staticMethod(){ //静态方法属于接口,只能用接口调用;public可省略
System.out.println("这是静态方法");
staticPrivateMethod(); //调用静态私有方法
}
//私有方法
private void privateMethod(){ //私有方法只能被接口内方法调用
System.out.println("这是普通私有方法");
}
private static void staticPrivateMethod(){ //可被接口内static方法调用
System.out.println("这是静态私有方法");
}
//常量
public static final int NUM = 10; //final关键字修饰代表不可改变;建议大写命名
int NUM_NUMBER2 = 20; //接口中常量必须赋值;public static final可省略
}
实现类
public class MyInterFaceImpl implements MyInterFace { //implement‘实现’接口,类似extends父类
//所有抽象方法必须‘覆盖重写’;除非实现类也须为抽象类
@Override
public void absMethod(){
System.out.println("抽象方法执行了");
}
@Override
public Character absMethod2(String name){
return name.charAt(0);
}
//默认方法可被覆盖重写
@Override
public void defaultMethod2(){
System.out.println("覆盖重写默认方法2");
}
//静态方法直接用接口名调用
//私有方法只可在接口内调用
}
调用
public class MyInterFaceDemo {
public static void main(String[] args) {
//MyInterFace inter = new MyInterFace; 错误,不能直接创建接口对象
MyInterFaceImpl impl = new MyInterFaceImpl();
//调用抽象方法
impl.absMethod();
System.out.println(impl.absMethod2("hacker"));
//调用默认方法
System.out.println("------------");
impl.defaultMethod1();
impl.defaultMethod2();
//调用静态方法
System.out.println("------------");
MyInterFace.staticMethod();
//调用常量
System.out.println("------------");
System.out.println(MyInterFace.NUM+" "+MyInterFace.NUM_NUMBER2);
}
}
output:
抽象方法执行了
h
------------
这是默认方法1
这是普通私有方法
覆盖重写默认方法2
------------
这是静态方法
这是静态私有方法
------------
10 20