认识Java的第十一天(上)——接口

接口,是一种引用类型,是方法的集合,如果说类的内部封装了成员变量,成员方法和构造方法,那么接口的内部主要是封装了方法,包含抽象方法(JDK1.7以前),默认方法,静态方法(JDK1.8),私有方法(JDK1.9)
接口的定义,它与类定义的方法差不多,定义接口使用interface,它也会编译成.class文件,但是一定要明确它并不是一个类,而是另外一种引用类型。
引用类型:数组,类,接口
接口的使用,不能创建对象,但是可以实现(implements,类似于前面的将的继承),一个实现类(可以看做接口的一个子类),需要实现接口中的所有的抽象方法,创建该类对象,就可以调用方法了,否则它必须是一个抽象类。

定义格式:
public interface 接口名称{
//抽象方法
//默认方法
//静态方法
//私有方法
}

含有抽象方法

抽象方法:使用abstract关键字修饰,可以省略,没有方法体,该方法供子类使用

public interface test11 {
    public abstract void method();
    //含有抽象方法,关键字abstract可以省略,方法中没有方法体,供子类使用
    }

含有默认方法和静态方法

默认方法:使用default修饰,不可以省略,供子类调用或者子类重写
静态方法:使用static关键字修饰,供接口直接调用

public interface test11 {
    //默认方法
    public default void method1(){
        //执行代码
    }
    //默认方法中default不能省略,必须有方法体。子类可以使用也可以选择重写
    //静态方法
    public static  void method2(){
        //执行代码
    }
    //使用static关键字修饰的方法,也可以有方法体的。
}

含有私有方法和私有静态方法

私有方法:使用private修饰,供接口中的默认方法或者静态方法调用(jdk1.9)

public interface test11 {
    //默认方法
    public default void method1(){
        //执行代码
        method3();//在默认方法中调用私有的方法
    }
    //静态方法
    public static  void method2(){
        //执行代码
        method4();
    }
    //私有方法
    private void method3(){
    //代码
    }
    //私有静态的方法
    private static void method4(){
    //代码
    }
}

基本实现

类和接口的关系就是实现关系,即类实现接口,该类就称为我们的接口的实现类,或者接口的子类。用到我们的implements关键字。

非抽象的子类实现接口:
1 、必须要重写接口中的所有的抽象方法
2、继承了接口的默认方法,即可直接调用方法,也可以选择重写。
class 类名 implements 接口名{
//重写接口中的所有的抽象方法)[必须重写]
/ /重写接口中的默认方法[选择性]
}

抽象方法的使用

必须全部实现

public interface test12 {
    public abstract void eat();
    public abstract void sleep();
}
public class test121 implements test12{
    @Override
    public void eat() {
        System.out.println("苹果");
    }

    @Override
    public void sleep() {
        System.out.println("家");
    }
}
public class test1211 {
    public static void main(String[] args) {
        test121 animal=new test121();
        animal.eat();
        animal.sleep();
    }
}

默认方法的使用

可以继承,也可以重写,但是只能通过实现类的对象去使用
继承:

public interface test12 {
    public  default void fly(){
        System.out.println("我可以飞");
    }
}
public class test121 implements test12{

}
public class test1211 {
    public static void main(String[] args) {
        test121 animal=new test121();
        animal.fly();
    }
}

重写

public class test121 implements test12{
    @Override
    public void fly() {
        System.out.println("我不飞了");
    }
}

静态方法的使用

静态与class文件有关系,只能使用接口名去调用,不可以通过实现类或者实现类的对象去调用

public interface test12 {

    //静态的方法
    public static void run(){
        System.out.println("我可以跑!");
    }
}
public class test121 implements test12{
//在子类这种不可以重写接口中的静态方法
}
public class test1211 {
    public static void main(String[] args) {
        test12.run();//调用接口中的静态方法的发法
        //test121.run();只能通过接口名去调用方法,其他的方式都不行
        //animal.run();
    }
}

私有的方法使用

私有方法:只能默认方法可以调用
私有静态方法:默认方法和静态方法可以调用
如果一个接口中的有多个默认方法,并且方法中有重复内容,那么可以抽取出来,封装到私有方法中,供默认方法去调用,从设计角度来看,私有方法就是对默认方法和静态方法辅助的一个特点。

public interface  Interface{
//默认方法
    default void fun(){
        fun1();
    }
    //私有方法
    private void fun1(){
        System.out.println("aa");
    }
}
public class test {
    public static void main(String[] args) {
       Animal1 animal=new Animal();
        animal.fun();
    }
}
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值