接口

接口

  • 普通类class:只有具体实现

  • 抽象类abstract:具体实现和规范(抽象方法)都有!

    • 接口interface:只有规范!自己无法写方法 ,是专业的约束!约束和实现分离:面向接口编程!
  • 接口不能被实例化,因为接口中没有构造方法

  • 接口就是规范,定义的是一组规则,体现了现实世界中**“如果你是…则必须能…”**的思想。

    • 如果你是天使,则必须能飞
    • 如果你是汽车,则必须能跑
    • 如果你是好人,则必须干掉坏人
    • 如果你是坏人,则必须欺负好人
  • 接口的本质是契约,就像法律一样,制定好后大家都必须遵守

  • 面向对象的精髓,是对对象的抽象,最能体现这一点的就是接口。

  • 声明类的关键字是class , 声明接口的关键字是interface

    • 接口中的所有定义的方法其实都是抽象的public abstract
    • 接口中的所有定义的属性其实都是静态的常量 public static final(不常用)
    //interface是定义的关键字
    public interface UserService{
        //接口中的所有定义的方法其实都是抽象的public abstract
        void run(String name); //不用加修饰符,前面修饰都是public abstract
       // 接口中的所有定义的属性其实都是静态的常量 public static final
        int AGE = 99//public static final int AGE = 99;
    }
    
  • 注意:接口都必须要有实现类!通过implements关键字实现接口,而且实现了接口的类,就需要重写接口中的方法

    //定义有增删改查的方法的接口
    public interface UserService{
        void add(String name);
        void delete(String name);
        void update(String name);
        void query(String name); 
    }
    //定义实现接口的类,必要要重写接口中的所有方法
    public class UserServiceImpl implements UserService{
         @Override
        public void add(String name) {
        }
    
        @Override
        public void update(String name) {
        }
    
        @Override
        public void delete(String name) {  
        }
    
        @Override
        public void query(String name) { 
        }
    }
    
  • 接口可以被多继承!即一个类可以实现多个接口

    //定义另外一个接口类TimeService
    public interface TimeService{
        void timer();
    }
    
    //然后UserServiceImpl可以实现两个接口,TimeService和UserService但必须重写两个接口中的方法
    public class UserServiceImpl implement UserService,TimeService{
        @Override
        public void add(String name) {
        }
        @Override
        public void update(String name) {
        }
        @Override
        public void delete(String name) {
        }
        @Override
        public void query(String name) {
        }
        @Override
        public void timer() {
        }
    }
    
    • Java8新特性,只有一个方法的接口叫做函数式接口,可以使用lambda表达式简化.
      格式:(parameters) -> expression
() -> 5 //不需要参数,返回值为5
x -> 2 * x //接收一个参数(数字类型),返回其2倍的值
(x,y) -> x-y //接收两个参数(数字类型),并返回他们的差值
(int x, int y) -> x + y    // 4. 接收2个int型整数,返回他们的和  
(String s) -> System.out.print(s)  //接受一个 string 对象,并在控制台打印,不返回任何值(看起来像是返回void)  


public class Lambda
{
    public static void main(String[] args) {
        Lambda lambda = new Lambda();
        //类型声明
        MathOperation addition = (int a,int b) -> a+b;

        //不用类型声明
        MathOperation subtraction = (a,b) -> a - b;

        System.out.println(lambda.operate(10,5,addition));
        System.out.println(lambda.operate(10,5,subtraction));
    }
    interface MathOperation{
        int operation(int a,int b);
    }
    interface GreetingService{
        void sayMessage(String message);
    }
    private int operate(int a,int b,MathOperation mathOperation){
        return mathOperation.operation(a,b);
    }
}
  • Lambda 表达式主要用来定义行内执行的方法类型接口,例如,一个简单方法接口。在上面例子中,我们使用各种类型的Lambda表达式来定义MathOperation接口的方法。然后我们定义了sayMessage的执行。
  • Lambda 表达式免去了使用匿名方法的麻烦,并且给予Java简单但是强大的函数化的编程能力。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值