Java 接口与内部类

目录

1、什么是接口?

1、接口中成员变量的访问特点

2、接口中成员方法的访问特点

3、接口是没有构造方法的

4、猫和狗接口代码演示

5、接口和类的关系

6、接口练习案例

2、什么是内部类

1、概念

2、成员内部类

3、静态内部类

4、局部内部类

5、匿名内部类


1、什么是接口?

接口就是一种公共的规范标准,只要符合规范标准,大家都可以通用。
Java中的接口更多的体现在对行为的抽象!


1.接口 用关键字interface 修饰
public interface 接口名{}

2.类实现接口用 implements 表示
public class 类 implements 接口 {}

3.接口不能够实例化
接口如何实例化呢?参照多态的方式,通过实现类对象实例化,这叫接口多态。
多态的形式:具体类多态,抽象类多态,接口多态。

4.多态的前提:有继承或者实现关系;有方法重写;有父(类/接口引用)指向(子/实现)类对象

5.接口的实现类,要么重写接口中所有的抽象方法、要么是抽象类

package jiekopudemo01;

public interface Animal {
    //接口Animal
    public abstract void eat();
}




package jiekopudemo01;

public class Catimpl implements Animal {
    @Override
    public void eat() {
        System.out.println("我们是好人呀!");

        //Catimpl是实现类  , 实现了我们的Anamil接口!

        /**
         * 实现类必须要重写接口中所有的方法!
         */
    }
}




package jiekopudemo01;

public class Test {
    public static void main(String[] args) {
        //接口是不能进行实例化的
        // Animal animal = new Animal();
        //程序会提示报错!

        Catimpl catimpl = new Catimpl();
        catimpl.eat();
    }
}


1、接口中成员变量的访问特点


2、接口中成员方法的访问特点

不需要写  public abstract  的

因为在接口处写方法默认就是抽象方法

如果想在接口中定义非抽象方法,那么就要嫁一个关键字-->default
但是此方法只限于jdk以后的版本,jdk8以前是不能使用这个方法的!

3、接口是没有构造方法的

在接口中,不能直接构造方法使用
接口中的抽象类是有抽象方法的!

4、猫和狗接口代码演示

接口

package jiekopudemo03;

public interface JumpInterface {
    /**
     * 跳高方法  -- 将publci abstract
     */
    void jump();
}



Animal类

package jiekopudemo03;

public abstract class Animal implements JumpInterface {
    private String name;//姓名!
    private int age;//年龄!

    public Animal(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public Animal() {
    }

    /**
     * 如果加上abstract  -- 相当于有了一个jump抽象方法!
     */


    public abstract void eat();


    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setAge(int age) {
        this.age = age;
    }
}



猫类

package jiekopudemo03;

import com.sun.xml.internal.stream.events.NamedEvent;

public class Cat extends Animal {
    public Cat(String name, int age) {
        //构造方法第一行默认调用父类中的午无参构造方法 -- super()

        super(name, age);

    }

    @Override
    public void jump() {
        System.out.println("我是猫类!我在跳高!");
    }

    @Override
    public void eat() {
        System.out.println("我是猫咪!我在吃鱼!");
    }


}



狗类

package jiekopudemo03;

public class Dog extends Animal {
    @Override
    public void eat() {
        System.out.println("我是狗类,我在干饭!");
    }

    @Override
    public void jump() {
        System.out.println("我是狗类,我在跳高!");
    }
}



测试类


package jiekopudemo03;

public class AnimalDemo {
    public static void main(String[] args) {
        JumpInterface cat = new Cat("小猫", 2);
        cat.jump();
        //cat.eat  // 报错!  编译看左边,JumpInterface接口中没有eat方法!

        System.out.println("------------------");
        Animal cat2 = new Cat("大猫", 5);
        System.out.println(cat2.getName() + ", " + cat2.getAge());
        cat2.eat();//不会报错是因为Animal类中有eat抽象方法!
        cat2.jump();
        System.out.println("--------------------");
        Animal dog = new Dog();
        dog.setName("我是小狗");
        dog.setAge(12);
        System.out.println(dog.getName() + ", " + dog.getAge());
        dog.eat();
        dog.jump();
    }
}


5、接口和类的关系


小结:

1、类与类之间的关系:一个类只能单继承一个父类,不能同时继承n多个不同的父类!   可以多层继承父类,但不能同时继承多个父类!

2、类与接口之间的关系:一个类可以实现n多个不同的接口    也就是说,在一个类中可以加入多个接口!

3、接口与接口的关系:一个接口是可以继承n多个不同的接口的!  接口和接口之间是可以进行多继承的!

如果接口1继承接口2和接口3,那么接口1中就会继承接口2和接口3的方法!


小结

成员区别
1.1、在抽象类中的是有变量和常量的,有构造方法的,有抽象方法也有非抽象方法
1.2、在接口中,只有常量、抽象方法!但是在JDK8往后,在接口中就可以定义非抽象方法
  
关系区别 
2.1、类与类只能进行单继承
2.2、类与接口可以实现单继承和多继承

设计区别
抽象类是对类进行抽象,包括属性的行为(对事物的抽象)
接口是对行为进行抽象,主要是对行为的抽象


我们可以通过接口的形式附加很多功能!

6、接口练习案例

抽象类

package jiekopudemo04;

public abstract class Door {
    /**
     * 开门的抽象方法
     */
    public abstract void opendoor();


    /**
     * 关门的抽象方法
     */
    public abstract void closedoor();
}



接口
package jiekopudemo04;

public interface FR {
    void fr();//人脸识别功能!
}




package jiekopudemo04;

public interface Alarm {
    void alarm();//报警功能!
}



door1类
package jiekopudemo04;

public class door1 extends Door implements Alarm {
    @Override
    public void opendoor() {
        System.out.println("我是door1,我可以开门!");
    }

    @Override
    public void closedoor() {
        System.out.println("我是door1,我可以关门!");
    }

    @Override
    public void alarm() {
        System.out.println("我是door1,我可以报警!!!");
    }
}



door2类
package jiekopudemo04;

public class door2 extends Door implements FR {
    @Override
    public void opendoor() {
        System.out.println("我是door2,我可以开门!");
    }

    @Override
    public void closedoor() {
        System.out.println("我是door2,我可以关门!");
    }

    @Override
    public void fr() {
        System.out.println("我是door2,我有人脸识别功能!");
    }
}



测试类

package jiekopudemo04;

public class Test {
    public static void main(String[] args) {
        Door door1 = new door1();
        door1.opendoor();
        door1.closedoor();
        Alarm alarm = new door1();
        alarm.alarm();

        System.out.println("---------------------------");

        Door door2 = new door2();
        door2.closedoor();
        door2.opendoor();
        FR fr = new door2();
        fr.fr();
    }
}


2、什么是内部类

1、概念

在类的内部定义的类为内部类。


package AnimalParent05;

public class opop {
    //外部类
    private int age = 11;
    public int code = 12;


    //内部类
    public class opop1 {
        public void opop1() {
            System.out.println("我是内部类");
            System.out.println(age);
            System.out.println(code);
        }
    }

    public void opop() {
        opop1 opop1 = new opop1();
        opop1.opop1();
    }
}




package AnimalParent05;

public class Test {
    public static void main(String[] args) {
        opop opop = new opop();
        opop.opop();
    }
}


2、成员内部类


3、静态内部类


4、局部内部类


5、匿名内部类



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/348089.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux文本编辑器-vi/vim

一.vi/vim编辑器介绍 vi\vim是visual interface的简称, 是Linux中最经典的文本编辑器 同图形化界面中的 文本编辑器一样,vi是命令行下对文本文件进行编辑的绝佳选择。 vim 是 vi 的加强版本,兼容 vi 的所有指令,不仅能编辑文本,而…

Linux——服务器管理建议

1、学习Linux的注意事项 1.1、Linux严格区分大小写 Linux是严格区分大小写的,这一点和Windows不一样,所以操作时要注意区分大小写的不同,包括文件名和目录名、命令、命令选项、配置文件设置选项等。 1.2、Linux中所有内容以文件形式保存 …

Qt6入门教程 11:父子对象关系

在上一篇中的纯手写部分,不管是创建菜单、工具栏还是状态栏,我们new完之后都未显式的调用delete进行销毁,这样难道不会有内存泄漏么? QMenuBar *menuBar new QMenuBar(this); QToolBar *toolBar new QToolBar(this); QStatusBa…

OpenHarmony从TypeScript到ArkTS的适配规则

本文通过提供简洁的约束,将标准的TypeScript代码重构为ArkTS代码。 尽管ArkTS是基于TypeScript设计的,但出于性能考虑,一些TypeScript的特性被限制了。因此,在ArkTS中,所有的TypeScript特性被分成三类。 完全支持的特…

Linux sudo与/etc/sudoers

sudo介绍 sudo命令可以让普通用户在执行需要超级用户权限的命令时,临时提升为超级用户。例如,普通用户可以使用sudo执行系统管理任务,如安装软件、修改系统配置等。访问控制:sudo命令通过sudoers文件中的配置,可以对用…

什么是Spring

文章目录 什么是Spring什么是 IoC Spring的IoCDI的概念 什么是Spring Spring 是一个包含了众多工具方法的 IoC容器。 什么是 IoC Inversion of Control — 控制反转 在传统的开发中,假设A类依赖于B类,那么创建A对象实例就需要先new一个B类对象&#x…

【操作系统】实验八 proc文件系统

🕺作者: 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux 😘欢迎关注:👍点赞🙌收藏✍️留言 🏇码字不易,你的👍点赞🙌收藏❤️关注对我真的很重要&…

网络原理-初识(2)

协议分层 对于网络协议来说,往往分成几个层次进行定义. 网络通信的过程中,需要涉及到的细节,其实非常多.如果要有一个协议来完成网络通信,就需要约定好方方面面的内容,导致非常复杂. 而如果拆分的话,就十分复杂,庞大,因此需要分层. 什么是协议分层 即只有相邻的层次可以沟通,…

并查集与图

并查集与图 一、并查集概念实现原理代码实现查找根节点合并两颗树判断是否是同一棵树树的数量 二、图的基本概念定义分类完全图顶点的度连通图 三、图的存储结构分类邻接表邻接表的结构代码实现 邻接矩阵代码实现 四、图的遍历方式广度优先深度优先 五、最小生成树概念Kruskal算…

图中点的层次——树与图的广度优先遍历

问题描述 代码实现 #include <cstring> #include <iostream> #include <algorithm>using namespace std;const int N 1e5 10;int n, m; int h[N], ne[N * 2], e[N * 2], idx; int d[N]; // 从节点1到当前节点的距离 int q[N * 2]; // 数组模拟队列void ad…

BabylonJS 6.0文档 Deep Dive 摄像机(五):多视角(二)

1. 摄像机激活 一般来说&#xff0c;一个场景&#xff08;Scece&#xff09;只有一个激活相机&#xff0c;可以使用的activeCamera属性来指定它。但您也可以使用以下代码定义多个active相机来达成多视角的效果&#xff1a; scene.activeCameras.push(camera); scene.activeCa…

TensorRT英伟达官方示例解析(三)

系列文章目录 TensorRT英伟达官方示例解析&#xff08;一&#xff09; TensorRT英伟达官方示例解析&#xff08;二&#xff09; TensorRT英伟达官方示例解析&#xff08;三&#xff09; 文章目录 系列文章目录前言一、04-BuildEngineByONNXParser----pyTorch-ONNX-TensorRT生成…

探索设计模式的魅力:深入理解面向对象设计的深层原则与思维

如何同时提高一个软件系统的可维护性 和 可复用性是面向对象对象要解决的核心问题。 通过学习和应用设计模式&#xff0c;可以更加深入地理解面向对象的设计理念&#xff0c;从而帮助设计师改善自己的系统设计。但是&#xff0c;设计模式并不能够提供具有普遍性的设计指导原则。…

SAP ERP 物料主数据同步外围系统

物料主数据集成在很多项目是比较常见的需求&#xff0c;在做系统实现之前我们需要明确涉及的业务流程和需求范围&#xff0c;并且对每个系统的业务边界进行明确&#xff1a; 如果是从SAP ERP 向其他系统推送数据&#xff0c;并且实时性要求高的情况下&#xff0c;我一般倾向于在…

开关电源空载电流测试方法大全

空载电流测试原理 开关电源空载电流是指电源在没有负载的情况下所消耗的电流。空载电流的大小会影响到电源的工作效率和稳定性&#xff0c;因此测量开关电源的空载电流是非常必要的。 开关电源空载电流测试是在不接任何负载的条件下&#xff0c;用万用表、电流表或者其它专用测…

[MRCTF2020]Ez_bypass1

代码审计&#xff0c;要求gg和id的MD5值相等而gg和id的值不等或类型不等 相同MD5值的不同字符串_md5相同的不同字符串-CSDN博客 不过这道题好像只能用数组 下一步是passwd不能是纯数字&#xff0c;但是下一个判断又要passwd等于1234567 这里通过passwd1234567a实现绕过 原…

【操作系统】实验六 分析源代码

&#x1f57a;作者&#xff1a; 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux &#x1f618;欢迎关注&#xff1a;&#x1f44d;点赞&#x1f64c;收藏✍️留言 &#x1f3c7;码字不易&#xff0c;你的&#x1f44d;点赞&#x1f64c;收藏❤️关注对我真的很重要&…

【grafana】使用教程

【grafana】使用教程 一、简介二、下载及安装及配置三、基本概念3.1 数据源&#xff08;Data Source&#xff09;3.2 仪表盘&#xff08;Dashboard&#xff09;3.3 Panel&#xff08;面板&#xff09;3.4 ROW&#xff08;行&#xff09;3.5 共享及自定义 四、常用可视化示例4.1…

【mongoDB】图形化界面工具(mongoDB Compass)

官网地址&#xff1a;https://www.mongodb.com/try/download/compass 下载完之后直接安装 桌面上会产生一个快捷方式 双击就会进入mongoDB图形化界面工具

IP组播地址

目录 1.硬件组播 2.因特网范围内的组播 IP组播地址让源设备能够将分组发送给一组设备。属于多播组的设备将被分配一个组播组IP地址 组播地址范围为224.0.0.0~239.255.255.255(D类地址)&#xff0c;一个D类地址表示一个组播组。只能用作分组的目标地址。源地址总是为单播地址…
最新文章