栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

66-Java接口:概述、多实现、多继承、JDK8后接口新增方法、接口注意事项(了解,极端面试可能会出现)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

66-Java接口:概述、多实现、多继承、JDK8后接口新增方法、接口注意事项(了解,极端面试可能会出现)

一、接口 1、接口是什么?
  • 接口也是一种规范:约束别人必须这样设计。

  • 规范一定是公开的:比如学校规定每天早上8点上课,是不是要公开出去?

  • 所以接口里面设计的常量和抽象方法必须都是公开化的,如果你不用public修饰,它也会默认为public,写不写都是公开的;

  • 举个例子:

    • 比如生活中的插座,规定是两孔就是两孔,你拿个三孔来插入两孔的,是不是就插不进?

2、接口的定义与特点
  • 语法格式:

    • 接口用 interface 关键字来定义
    • 注意:由于接口体现规范思想,规范默认都是公开的,所以接口中代码层面沉淀的修饰符都可以省略不写
    public interface 接口名{
        // 常量
        // 抽象方法
    }
    
    package com.app.d9_interface;
    
    
    public interface InterfaceDemo {
        // 注意:由于接口体现规范思想,规范默认都是公开的,所以代码层面沉淀的修饰符都可以省略不写
        // 1.常量
    //    public static final String SCHOOL_NAME = "B站大学";
        String SCHOOL_NAME = "B站大学";    // 不会报错,默认公开
    //    public static final String USER_NAME = "admin";
        String USER_NAME = "admin";     // 不会报错,默认公开
        String PASS_WORD = "123123";    // 不会报错,默认公开
    
        // 2.抽象方法
    //    public abstract void run();
        void run();     // 不会报错,默认公开
    //    public abstract void eat();
        void eat();     // 不会报错,默认公开
        void write();   // 不会报错,默认公开
    }
    



二、接口的使用 1、接口的实现
  • 接口是用来被类 实现(implements) 的,实现接口的类称为 实现类 ;实现类可以理解成所谓的子类。

    修饰符 class 实现类 implements 接口1,接口2,接口3, ...{
        
    }
    
  • 实现关键字:implements;

  • 从上面的代码中,接口可以被单类实现,也可以被类多实现。

    package com.app.d10_interface_implements;
    
    
    public interface SportMan {
        // 规范一:运动员一定要训练
        void run();
    
        // 规范二:运动员一定要参加比赛
        void competition();
    }
    
    package com.app.d10_interface_implements;
    
    
    public interface Law {
        // 规范一:必须遵纪守法
        void rule();
    }
    
    package com.app.d10_interface_implements;
    
    
    public class PingPongMan implements SportMan, Law{
        private String name;    // 乒乓球运动员姓名
    
        public PingPongMan(String name) { this.name = name; }
    
        @Override
        public void rule() {
            System.out.println(name + "必须遵纪守法!");
        }
    
        @Override
        public void run() {
            System.out.println(name + "必须每天训练~~");
        }
    
        @Override
        public void competition() {
            System.out.println(name + "要参加比赛,为国争光^_^");
        }
    }
    
    package com.app.d10_interface_implements;
    
    
    public class InterfaceImplementsTest {
        public static void main(String[] args) {
            PingPongMan pingPongMan = new PingPongMan("张继光");
            pingPongMan.rule();
            pingPongMan.run();
            pingPongMan.competition();
        }
    }
    
    张继光必须遵纪守法!
    张继光必须每天训练~~
    张继光要参加比赛,为国争光^_^
    
    Process finished with exit code 0
    
4、接口实现的注意事项
  • 一个类实现了接口,必须重写完:全部被实现接口的全部抽象方法,否则这个类需要定义成抽象类。


三、接口与接口的关系 1、基本小结
  • 类和类的关系:单继承;
  • 类和接口的关系:多实现;
  • 接口和接口的关系:多继承,一个接口可以同时继承多个接口。
2、接口多继承的作用
  • 规范合并,整合多个接口为同一个接口,便于子类实现。

  • 也就是:

    • 一个接口继承多个接口,得到多个接口的功能集结于自身,这样接口实现类就只需要实现一个接口,就能得到多个接口的功能。
    package com.app.d11_interface_extends;
    
    
    public interface People {
        
        void eat();
        void sleep();
    }
    
    package com.app.d11_interface_extends;
    
    
    public interface Law {
        
        void rule();
    }
    
    package com.app.d11_interface_extends;
    
    
    public interface SportMan extends People, Law{
        
        void run();
        void competition();
    }
    
    package com.app.d11_interface_extends;
    
    
    public class BasketBallMan implements SportMan{
        @Override
        public void rule() {
            System.out.println("篮球运动员必须守法");
        }
    
        @Override
        public void eat() {
            System.out.println("篮球运动员必须吃东西");
        }
    
        @Override
        public void sleep() {
            System.out.println("篮球运动员必须睡觉");
        }
    
        @Override
        public void run() {
            System.out.println("篮球运动员必须训练");
        }
    
        @Override
        public void competition() {
            System.out.println("篮球运动员必须参加比赛");
        }
    }
    
    package com.app.d11_interface_extends;
    
    
    public class InterfaceExtendsTest {
        public static void main(String[] args) {
            BasketBallMan basketBallMan = new BasketBallMan();
            basketBallMan.rule();
            basketBallMan.run();
            basketBallMan.competition();
            basketBallMan.eat();
            basketBallMan.sleep();
        }
    }
    
    篮球运动员必须守法
    篮球运动员必须训练
    篮球运动员必须参加比赛
    篮球运动员必须吃东西
    篮球运动员必须睡觉
    
    Process finished with exit code 0
    



四、JDK8开始之后接口新增的方法 1、新增的方法
  • 之所以新增的原因呢!也很简单:
    • 比如一个程序员,日夜兼程的将一个软件开发出来了,但是呢,后面需要升级这个软件的版本,因此需要去丰富原来的接口,一堆堆的接口一个一个的丰富,丰富完了,还得去接口实现类,实现这些新增的功能,因此开发代码太大了;
    • 所以,java想到了一个办法:既能升级技术,又希望实现类的程序代码不用动;
    • 这个办法就是:允许接口中直接定义带有方法体的方法。
第一种:默认方法
  • 类似之前写的普通实例方法:必须用 defalut 修饰;

  • 默认会 public 修饰。需要用接口的实现类的对象来调用;

    defalut void run() {
        System.out.println("开始跑~~");
    }
    


第二种:静态方法
  • 默认会 public 修饰,必须 static 修饰;

  • 注意:接口的静态方法必须要用接口本身的接口名来调用。

    static void inAddr() {
    	System.out.println("我们都在bilibili教育中心快乐的学习Java~~");
    }
    


第三种:私有方法
  • 就是私有的实例方法,必须使用 private 修饰,从 JDK9才开始有的。

  • 只能在本接口中被其他的默认方法或者私有方法访问。

    private void go() {
    	System.out.println("准备~~")
    }
    



2、IDEA调整编译版本



  • 点完ok后,如下代码立马报错!!

  • 只需要将jdk版本调整到jdk9之后,就没问题了




3、知识总结

1、JDK8开始新增了那些方法?

  • 默认方法:defalut修饰,实现类对象调用;
  • 静态方法:static修饰,接口名称调用;
  • 私有方法:private修饰,jdk9开始才有的,只能在接口内部其他的默认方法或者私有方法访问。
  • 注意:它们都会默认被public修饰的。

提醒:JDK8新增的3种方法我们自己在开发中很少使用的,通常是java源码涉及到。

现阶段需要理解、识别这些语法,明白调用关系即可。




五、接口使用的注意事项
  • 1、接口不能创建对象;

    • 因为接口是很彻底的抽象,没有构造器,无法创建对象
  • 2、一个类实现多个接口,多个接口中有同样的静态方法不冲突;


  • 3、一个类继承了父类,同时又实现了接口,父类中和接口中有同名的方法,默认先使用父类的;


  • 4、一个类实现了接口,多个接口中存在同名的默认方法,不冲突,这个类重写该方法即可;


  • 5、一个接口继承多个接口,是没有问题的,如果多个接口中存在规范冲突则不能多继承。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1029849.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号