java学习之接口二

news2024/9/29 23:31:22

目录

一、接口vs继承

一、继承

二、接口 

二、接口多态特性

一、多态参数

二、多态数组

三、多态传递

三、接口练习


一、接口vs继承

一、继承

package com.hspedu.interface_;

public class ExtendsVsInterface {
    public static void main(String[] args) {
        LittleMonkey  wuKong = new LittleMonkey("悟空");
        wuKong.climbing();
    }
}
//父类
class Monkey{
    private String name;

    public Monkey(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

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

    public void climbing(){
        System.out.println(name + "猴子会爬树...");
    }
}
class LittleMonkey extends Monkey{
    public LittleMonkey(String name) {
        super(name);
    }
}

子类继承了父类,也继承了父类的方法,根据继承查找原则,就会输出以下内容 

二、接口 

但是如果希望“悟空”能像鱼一样游泳,像鸟儿一样飞翔,就只能通过实现接口来完成

package com.hspedu.interface_;

public class ExtendsVsInterface {
    public static void main(String[] args) {
        LittleMonkey  wuKong = new LittleMonkey("悟空");
        wuKong.climbing();
        wuKong.swim();
    }
}
//父类
class Monkey{
    private String name;

    public Monkey(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

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

    public void climbing(){
        System.out.println(name + "猴子会爬树...");
    }
}

//接口
interface Fishable{
    void swim();
}
class LittleMonkey extends Monkey implements Fishable{
    public LittleMonkey(String name) {
        super(name);
    }

    @Override
    public void swim() {
        System.out.println(getName() + "通过学习可以像鱼儿一样游泳...");
    }
}

 由于一个类可以实现多个接口,所以也可以实现像鸟儿一样飞翔

package com.hspedu.interface_;

public class ExtendsVsInterface {
    public static void main(String[] args) {
        LittleMonkey  wuKong = new LittleMonkey("悟空");
        wuKong.climbing();
        wuKong.swim();
        wuKong.fly();
    }
}
//父类
class Monkey{
    private String name;

    public Monkey(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

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

    public void climbing(){
        System.out.println(name + "猴子会爬树...");
    }
}

//接口
interface Fishable{
    void swim();
}
interface Birdable{
    void fly();
}
class LittleMonkey extends Monkey implements Fishable,Birdable{
    public LittleMonkey(String name) {
        super(name);
    }

    @Override
    public void swim() {
        System.out.println(getName() + "通过学习可以像鱼儿一样游泳...");
    }

    @Override
    public void fly() {
        System.out.println(getName() + "通过学习可以像鸟儿一样飞翔...");
    }
}

 小结: 当子类继承了父类, 就自动的拥有父类的功能
如果子类需要扩展功能, 可以通过实现接口的方式扩展.
可以理解实现接口 是 对 java 单继承机制的一种补充.

二、接口多态特性

一、多态参数

 

package com.hspedu.interface_;

public class Computer {
    //编写一个方法,计算机工作
    //解读:
    //1.UsbInterface usbInterface形参是接口类型UsbInterface
    //2.可以接收Camera类和Phone类的对象实例(实参),因为这两个类实现了UsbInterface接口
    public void work(UsbInterface usbInterface){
        usbInterface.start();
        usbInterface.stop();
    }
}
package com.hspedu.interface_;

public class Interface01 {
    public static void main(String[] args) {
        //创建手机、相机对象
        Phone phone = new Phone();
        Camera camera = new Camera();
        //创建计算机
        Computer computer = new Computer();
        computer.work(phone);//把手机接入到计算机
        System.out.println("=============");
        computer.work(camera);//把相机接入到计算机
    }
}

进一步说明

package com.hspedu.interface_;

public class InterfacePolyParameter {
    public static void main(String[] args) {
        //接口的多态体现:类似父类引用指向子类对象
        //接口类型的变量ig1 可以指向 实现了IG接口的类(Monster、Car)的对象实例
        IG ig1 = new Monster();
        ig1 = new Car();

        //继承体现的多态
        //父类的对象引用指向子类对象本身
        A02 a02 = new B02();
        a02 = new C02();
    }
}
interface IG{}
class Monster implements IG{}
class Car implements IG{}

class A02{
    
}
class B02 extends A02{}
class C02 extends A02{}

二、多态数组

package com.hspedu.interface_;

public class InterfacePolyArr {

    public static void main(String[] args) {
        Usb[] usbs = new Usb[2];
        usbs[0] = new Phone_();
        usbs[1] = new Camera_();
        for (int i = 0; i < usbs.length; i++) {
            usbs[i].work();//动态绑定机制
            if(usbs[i] instanceof Phone_){
                //向上转型之后不能调用子类特有的成员,所以必须再向下转型
                Phone_ phone_ = (Phone_) usbs[i];
                phone_.call();
            }

        }
    }
}
interface Usb{
    void work();
}
class Phone_ implements Usb{
    @Override
    public void work() {
        System.out.println("手机正在工作...");
    }
    public void call(){
        System.out.println("有电话进来了...");
    }
}
class Camera_ implements Usb{

    @Override
    public void work() {
        System.out.println("相机正在工作...");
    }
}

三、多态传递

package com.hspedu.interface_;

public class InterfacePolyPass {
    public static void main(String[] args) {
        //可以指向实现了接口的类的对象实例
        IH ih = new Teacher();
        IJ ij = new Teacher();
    }
}
//接口多态的传递性
interface IJ{ }
interface IH{ }

class Teacher implements IH{

}

由于Teacher类没有实现接口IJ,所以上述写法是会报错的

 

 但是如果让IH继承IJ,就可以了,这就是接口多态的传递

package com.hspedu.interface_;

public class InterfacePolyPass {
    public static void main(String[] args) {
        //接口类型的变量可以指向实现了接口的类的对象实例
        IH ih = new Teacher();
        //Teacher类没有实现接口IJ,但是IH继承了IJ,也是可以的
        IJ ij = new Teacher();
    }
}
//接口多态的传递性
interface IJ{ }
interface IH extends IJ{ }

class Teacher implements IH{

}

同样的,如果接口IJ中有抽象方法,那么Teacher类也需要去实现这些抽象方法

 

package com.hspedu.interface_;

public class InterfacePolyPass {
    public static void main(String[] args) {
        //接口类型的变量可以指向实现了接口的类的对象实例
        IH ih = new Teacher();
        //Teacher类没有实现接口IJ,但是IH继承了IJ,也是可以的
        IJ ij = new Teacher();
    }
}
//接口多态的传递性
interface IJ{
    void hi();
}
interface IH extends IJ{ }

class Teacher implements IH{

    @Override
    public void hi() {
        System.out.println("hi。。。");
    }
}

三、接口练习

 

package com.hspedu.interface_;

public class InterfaceExercise02 {
    public static void main(String[] args) {
        new C().pX();
    }
}
interface A03{
    int x = 0;
}
class B03 {
    int x = 1;

}
//class C既继承了B03,又实现了A03
//也就是说既可以访问B03中的x,也可以访问A03中的x,所以会报错说x ambiguous
class C extends B03 implements A03 {
    public void pX() {
        //接口,接口的属性是 public static final int x = 0;
        //静态属性可以直接使用 类名.变量名 访问
       System.out.println(A03.x);

       //父类的属性,使用super关键字
        System.out.println(super.x);
    }

}

总结:继承和实现接口的等级是一样的,所以如果父类和接口中的变量名重合的话,在实现类(子类)中访问时就会提示ambiguous(模棱两可)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

5G物理层信道pdcch说明(留档)

网络七层协议OSI是一个开放性的通信系统互连参考模型。 它是国际标准组织制定的一个指导信息互联、互通和写作的网络规范。 开放&#xff1a;是指只要遵循OSI标准&#xff0c;位于世界的任何地方的任何系统之间都可以进行通讯&#xff1b;开放系统&#xff1a;是指遵循互联网协…

【结构型模式】装饰者模式

文章目录优秀借鉴1、概述2、结构3、实现方式3.1、案例引入3.2、实现步骤3.3、案例实现4、装饰者模式优缺点5、结构型模式对比5.1、装饰者模式和代理模式5.2、装饰者模式和适配器模式6、应用场景优秀借鉴 装饰模式 — Graphic Design Patterns设计模式 | 装饰者模式及典型应用黑…

基于图卷积神经网络GCN的二部图链路预测方法实现思路和完整代码【可用于疾病-靶点、miRNA-疾病等相关预测】

本文解决的问题 基本假设&#xff1a;二部图只有邻接矩阵&#xff0c;没有节点特征&#xff0c;并且进行链路预测&#xff0c;有部分链路未知。 如果你有初始节点特征&#xff0c;直接换掉即可 实现思路 这段代码主要是用于构建一个基于图卷积神经网络&#xff08;GCN&#…

内网域渗透总结(红日靶场一)

一、靶场环境搭建 红日靶场&#xff1a;http://vulnstack.qiyuanxuetang.net/vuln/detail/2/靶机通用密码&#xff1a;hongrisec2019win7win2003win2008 这个搭建靶场的过程是我经过实际操作&#xff08;踩坑&#xff09;总结的最简单省事的方式。 首先创建一个仅主机模式的…

使用appuploader工具发布证书和描述性文件教程

使用APPuploader工具发布证书和描述性文件教程 之前用AppCan平台开发了一个应用&#xff0c;平台可以同时生成安卓版和苹果版&#xff0c;想着也把这应用上架到App Store试试&#xff0c;于是找同学借了个苹果开发者账号&#xff0c;但没那么简单&#xff0c;还要用到Mac电脑的…

数据结构之图(最小生成树+最短路径)

基本概念 连通&#xff1a;若a->b存在路径&#xff0c;即为连通 连通图&#xff1a;该图中任意两点均连通&#xff0c;即为连通图 连通分量&#xff1a;下图为无向图&#xff0c;但存在三个连通分量 强连通图&#xff1a;双向的连通图 强连通分量&#xff1a;有向图中的双…

分享一个免梯子智能的问答工具ChatGPT,刷题和学习的好帮手

使用了这个问答工具后,感觉前后端都要被替代了,太强了。 由于本人之前很想体验,但是一直难搞,最近发现了一个免梯子的,重要事情说一遍,免梯子!是我最近发现的最好用,最快的,且不要梯子的,用起来爽,界面也挺好看的,大家快玩儿玩儿。 试了一下写代码,写文案……真棒…

文心一言 VS chatgpt (9)-- 算法导论2.3 7题 3.1 1题

七、描述一个运行时间为O(nlgn)的算法&#xff0c;给定n个整数的集合S和另一个整数&#xff0c;该算法能确定 S中是否存在两个其和刚好为工的元素。 文心一言&#xff1a; 这里是一个运行时间为O(nlgn)的算法&#xff0c;可以用来确定集合 S 中是否存在两个元素&#xff0c;它…

FE_CSS 页面布局之定位

1 为什么需要定位 某个元素可以自由的在一个盒子内移动位置&#xff0c;并且压住其他盒子。 当我们滚动窗口的时候&#xff0c;盒子是固定屏幕某个位置的。 以上效果&#xff0c;标准流或浮动都无法快速实现&#xff0c;此时需要定位来实现。 浮动可以让多个块级盒子一行没有…

第四章 word2vec 的高速化

目录4.1 word2vec 的改进①4.1.1 Embedding 层4.1.2 Embedding 层的实现4.2 word2vec 的改进②4.2.1 中间层之后的计算问题4.2.2 从多分类到二分类4.2.3 sigmoid 函数和交叉熵误差4.2.4 多分类到二分类的实现4.2.5 负采样4.2.6 负采样的采样方法4.2.7 负采样的实现4.3 改进版 w…

组态王与FX5U之间如何快速实现无线通讯?

本方案是基于Modbus RTU协议下实现的1主多从自组网无线通信形式&#xff0c;主站为组态王&#xff0c;从站为两台三菱FX5U PLC。在工厂里&#xff0c;组态王和plc所处位置距离较为分散&#xff0c;重新铺设电缆线工期长&#xff0c;成本高&#xff0c;故采用日系PLC专用无线通讯…

【Halcon 笔记2】参数

一、图形参数 图形参数 Iconic, 包括 image, region, XLD 1.1 image 图像由一个或者多个通道组成&#xff0c;是大小相同的矩阵&#xff0c;包含各种像素类型的灰度值 在图像显示界面&#xff0c;按ctrl健&#xff0c;可以查看当前的像素值 灰度图 一个通道像素点存放在一个…

STM32开发(十四)STM32F103 数据手册 —— 通用定时器 PWN 详解

文章目录主要特点通用定时器内部框图功能描述计数器模式计数器时钟可选择时钟源PWM输入模式STM32F103内部通用定时器包括TIMx (TIM2、 TIM3、 TIM4和TIM5)定时器 主要特点 16位向上、向下、向上/向下自动装载计数器 16位可编程(可以实时修改)预分频器&#xff0c;计数器时钟频…

【MySQL学习】认识MySQL数据库

目录一、什么是数据库二、主流数据库三、MySQL数据库的基本使用3.1 MySQL的安装3.2 MySQL服务器管理3.3 连接MySQL服务器3.4 MySQL服务器&#xff0c;数据库与表之间的关系3.5 使用案例3.6 数据存储四、MySQL架构五、SQL分类六、存储引擎6.1 定义6.2 查看存储引擎6.3 存储引擎对…

检测图中的负循环 | (贝尔曼福特)

我们得到了一个有向图。我们需要计算图形是否有负循环。负循环是循环的总和变为负的循环。 在图形的各种应用中都可以找到负权重。例如,如果我们沿着这条路走,我们可能会得到一些好处,而不是为一条路付出代价。 例子:

基于html+css的图片展示13

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

震惊!竟然有人如此解释关键字中的static

&#x1f929;&#xff1a;大家好&#xff0c;我是paperjie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 &#x1f970;&#xff1a;这里是C专栏&#xff0c;笔者用重金(时间和精力)打造&#xff0c;基础知识一网打尽&#xff0c;希望可以帮到读者们哦。 &#x1f…

工作中使用即时通讯软件有什么好处?

以前&#xff0c;即时通讯被认定为是一个专供个人使用的通信工具&#xff0c;即时消息软件不仅用于简化通信和快速响应&#xff0c;而且还用于文件共享和信息更新&#xff0c;它可帮助公司中的员工进行沟通、满足需求并实现目标。在即时通讯的帮助下&#xff0c;员工无需离开办…

交互式shell脚本编程2

当你在终端环境下安装新的软件时&#xff0c;你可以经常看到信息对话框弹出&#xff0c;需要你的输入&#xff0c;比如&#xff1a;RHEL/CentOS自带的setup&#xff0c;对话框的类型有密码箱、检查表、菜单等等。他们可以引导你以一种直观的方式输入必要的信息&#xff0c;使用…

3d可视化精炼数字工厂互动大屏展示提高企业竞争力

随着各种新兴技术的不断崛起和进步&#xff0c;结合云计算、5G通信、物联网等技术突破数据孤岛&#xff0c;加速炼钢厂整个行业的转型升级已成为行业的大趋势。 传统的维修场景中&#xff0c;一线员工的双手难以得到解放&#xff0c;一线工作数据难以收集、保存、输出。一辆汽车…