zoukankan      html  css  js  c++  java
  • Java之接口(interface)的理解

    1.接口在Java中使用interface关键字来定义 

    2.在Java中接口和类是并列的结构

    3.如何定义接口?定义接口中的成员 

      3.1 jdk7以及以前:只能够定义全局常量和抽象方法

        全局常量:public、static、final(但是书写时,可以省略不写) 

        抽象方法:public、abstract(可以省略不写) 

      3.2 jdk8:除了定义全局常量和抽象方法以外,还可以定义静态方法、默认方法

    4.接口中不能定义构造器。意味着接口不能实例化

    5.Java开发中,接口通过让类去实现(implements)的方式来使用

      如果实现类覆盖了接口中所有的抽象方法,则此实现类就可以实例化

      如果实现类没有覆盖接口中所有抽象方法,则此实现类任然为一个抽象类 

      如果实现类的时候,该接口有继承性,该实现类需要去覆盖接口和父接口的所有抽象方法,则此实现类就可以实例化 

    6.Java类可以实现多个接口,弥补了Java类的单继承性的局限性

    7.有继承有实现的类格式:

    class 子类名 extends 父类名 implements 接口名1,接口名2 

    8.接口与接口之间可以多继承

    9.接口的具体使用,可以体现多态性 

    10.接口,实际上可以看做是一种规范

    /**
     * 接口的使用
     */
    
    public class InterfaceTest {
        public static void main(String[] args) {
    
            //报错,因为是默认加了public static final,final修饰的属性无法修改
            //Person.name = "李四";
            System.out.println("学生的最多学习时长"+Student.studyMaxTime);
            Student student =new Student("小明");
            student.studyMethod();
        }
    }
    
    //声明接口
    interface Study{
        //接口中不能定义构造器
    
        //定义全局常量
        public static final int studyMaxTime = 199;
    
        //省略了public static final
        int studyMinTime =10;
    
        //定义抽象方法
        public abstract void studyMethod();
    
        //省略了public abstract
        void studyDomain();
    
        String getName();
    }
    
    interface Play{
        void play();
    }
    
    
    //使用具体的class去实现接口
    class Student implements Study,Play{
        //重写了接口Person中的所有的抽象方法
        private String name;
    
        public Student(String name){
            this.name = name;
        }
        @Override
        public void studyMethod(){
            System.out.println("聪明的学生有较好的学习方式");
        }
    
        @Override
        public void studyDomain() {
            System.out.println(this.name+" run");
        }
    
        @Override
        public String getName() {
            return this.name;
        }
    
        @Override
        public void play() {
            System.out.println("学生没有时间玩耍");
        }
    }
    
    abstract class Man implements Study{
        //没有重写接口Person所有的抽象方法,只能表明是抽象类,不然就报错了
        @Override
        public void studyMethod(){
            System.out.println("一部分男人没有时间学习");
        }
    }
  • 相关阅读:
    Debian 9/Ubuntu 18添加rc.local开机自启的方法
    第一次使用Debian9所遇到的问题
    Open-Falcon注册时点击Sign up按钮没反应
    使用VMware虚拟机里的Ubuntu18.04部署RAID 10磁盘阵列
    Ubuntu18.04下Ansible的基本使用
    Go语言求水仙花数(for循环)
    自研模块加载器(四) 模块资源定位-异步加载
    自研模块加载器(三) module模块构造器设计-模块数据初始化
    自研模块加载器(二) 加载器结构与设计导论
    自研模块加载器(一) 模块系统概述与自定义模块规范书写规定
  • 原文地址:https://www.cnblogs.com/king2/p/14603762.html
Copyright © 2011-2022 走看看