zoukankan      html  css  js  c++  java
  • JAVA学习25天

    一、今日学习接口的使用与继承

    JAVA是只支持单继承的,但现实之中存在多重继承这种现象,如“金丝猴是一种动物”,金丝猴从动物这个类继承,同时“金丝猴是一种值钱的东西”,金丝猴从“值钱的东西”这个类继承,同时“金丝猴是一种应该受到保护的东西”,金丝猴从“应该受到保护的东西”这个类继承。这样金丝猴可以同时从 “动物类”、“值钱的东西类”、“应该受到保护的东西” 这三个类继承,但由于JAVA只支持单继承,因此金丝猴只能从这三个类中的一个来继承,不能同时继承这三个类。因此为了封装现实生活中存在的多重继承现象,为了实现多继承,可以把其中的两个类封装成接口。使用接口可以帮助我们实现多重继承。

    1.使用接口

     (1)接口不能单独实例化,需要通过接口的实现类来进行实例化,接口的实现类必须实现接口内的全部方法,

    (2)接口的使用

    接口的实现类的形式:

    [修饰符] class <类名> [extends 父类名]  [implements 接口列表]

    实例如下:

    接口的实例化:接口名  对象=new 接口的实现类();

    例如下面代码中的     Student2 inter=new Interface();

    复制代码
    package test1;
    interface Student2{
        int clas=0604;
        void learning();
        void eat();
        void sleep();
    }
    
    public class Interface implements Student2{
        @Override
        public void learning() {
            System.out.println("学生正在学习!");
        }
        @Override
        public void eat() {
            System.out.println("学生正在吃饭!");
        }
        @Override
        public void sleep() {
            System.out.println("学生正在睡觉!");
        }
        public static void main(String[] args) {
            Student2 inter=new Interface();
            inter.eat();
            inter.sleep();
            inter.learning();
        }
    
    }

    (3)Java接口的特征归纳 

    • Java接口中的成员标量默认为public、static、final类型的,而对于它们都可以省略,接口中的成员变量为常量,并且建议全部使用大写,单词之间用“-”分隔。
    • Java接口中的方法默认都是public、abstract类型的,并且public和abstract是可以省略的,接口中的方法没有方法体,不能被实例化。
    • Java接口中只能包含public、static、final类型的成员变量和public、abstract类型的成员方法。接口中的变量必须初始化,并且方法必须是抽象方法,否则会报错。
    • 接口中没有构造方法,不能被实例化。
    • 一个接口不能实现另一个接口,但它可以继承多个其他的接口。
    • Java接口必须通过类来实现它的实现类来实现抽象方法。
    • 当类实现了某个Java接口时,它必须实现接口中的所有抽象方法,否则,这个类必须声明为抽象的。
    • 不允许创建接口的实例化,但允许定义接口类型的引用变量,该引用变量引用实现了这个接口的类的实例。
    • 一个类只能继承一个直接的父类,但可以实现多个接口,间接地实现了多继承。

    2.接口的继承

    (1)接口继承接口

    接口只能继承接口,不能继承普通类和抽象类。

    复制代码
    interface Student2{
        int clas=0604;
        void learning();
        void eat();
        void sleep();
    }
    interface Student3{
        void play();
    }
    interface Student4 extends Student2,Student3{
        public abstract void gohome();
    }
    复制代码

    (2)间接实现多重继承

    复制代码
    package test1;
    interface Student2{
        int clas=0604;
        void learning();
        void eat();
        void sleep();
    }
    interface Student3{
        void play();
    }
    interface Student4 extends Student2,Student3{
        public abstract void gohome();
    }
    
    public class Interface implements Student4{
        @Override
        public void learning() {
            System.out.println("学生正在学习!");
        }
        
        public void eat() {
            System.out.println("学生正在吃饭!");
        }
        
        public void sleep() {
            System.out.println("学生正在睡觉!");
        }
        
        public void play() {
            System.out.println("学生正在玩耍!");
        }
        
        public void gohome() {
            System.out.println("学生正在回家!");
        }
        public static void main(String[] args) {
            Student4 inter=new Interface();
            inter.eat();
            inter.sleep();
            inter.learning();
            inter.play();
            inter.gohome();
        }
    
    }

    接口总结:接口和接口之间可以相互继承,类和类之间可以相互继承,类和接口之间,只能是类来实现接口

    二、问题

    接口的使用不太流畅

    三、明日继续学习接口

  • 相关阅读:
    浏览器加载AMD标准的输出文件
    Mac安装brew && brew 安装yarn
    插件集
    vue-router复用组件时不刷新数据
    加入sass后运行项目报错:TypeError: this.getResolve is not a function
    安装cnpm后运行报cnpm : 无法加载文件 C:UsersyizonAppDataRoaming pmcnpm.ps1,因为在此系统上禁止运行脚本
    图片canvas跨域问题解决方案之一
    vscode配置
    搭建express服务
    项目初始化
  • 原文地址:https://www.cnblogs.com/zyljal/p/13406458.html
Copyright © 2011-2022 走看看