抽象类,接口

news/2024/5/3 15:41:01/文章来源:https://blog.csdn.net/weixin_43669384/article/details/130020525
  1. 抽象类:当父类的某些方法,需要声明,但是又不确定如何实现时,可以将其声明为抽象方法,那么这个类就是抽象类。
  2. package com.hspedu.abstract_;public class Abstract01 {public static void main(String[] args) {}
    }
    abstract class Animal{//抽象类private String name;public Animal(String name) {this.name = name;}//父类方法不确定性的问题//该方法设计为抽象(abstract)方法//所谓抽象方法就是没有实现的方法//所谓没有实现就是指没有方法体。//当一个类中存在抽象方法时,需要将该类声明为abstract类//一般来说,抽象类会被继承,由子类实现抽象方法//    public void eat(){
    //        System.out.println("这是一个动物,但是不知道吃什么...");
    //    }public abstract void eat();
    }

    抽象类的价值更多作用是在于设计,是设计者设计好后,让子类继承并实现抽象类()。抽象类面试好问,在框架和设计模式使用较多。

  3. 抽象类细节

    1. 抽象类不能实例化

    2. 抽象类不一定包含abstract方法。可以没有抽象方法,可以有普通方法

    3. 一旦含有抽象(abstract)方法,这个类必须声明为抽象类。

    4. abstract只能修饰类和方法,不能修饰属性和其它的。

    5. 抽象类可以有任意成员【抽象类还是类】

    6. 抽象方法不能有主体{}

    7. 如果一个类继承了抽象类,则它必须实现抽象类的所有抽象方法,除非它自己也声明为abstract类

    8. package com.hspedu.abstract_;public class Abstract02 {public static void main(String[] args) {}
      }
      abstract class AA{public abstract void eat();
      }class BB extends AA{@Overridepublic void eat() {System.out.println("食草动物吃草...");}
      }
      

      子类实现抽象方法就是有主体{}。

    9. 抽象方法不能使用private,final,static来修饰,因为这些关键字都是和重写相违背的

    10. final类是不能被继承,final方法不希望被子类修改,抽象方法不就是父类只写方法不写主体{},然后通过子类来重写吗!

    11. private是私有的方法怎么去重写呢

  4. 抽象类最佳实践-模板设计模式

    package com.hspedu.abstract_.template_;abstract public class Template {//抽象类-模板设计模式public abstract void job();//抽象方法public void calculateTime(){//实现方法,调用job方法//得到开始的时间long start = System.currentTimeMillis();job();//动态绑定//得到结束时间long end = System.currentTimeMillis();System.out.println("任务执行时间"+(end-start));}
    }
    class AA extends Template{//父类是抽象的,要么子类也是抽象的,要么重写父类的抽象方法@Overridepublic void job() {long sum=0;for (int i = 1; i <= 100000; i++) {sum+=i;}}
    }
    class BB extends Template{@Overridepublic void job() {long sum=0;for (int i = 1; i <= 80000; i++) {sum*=i;}}
    }
    class TemplateTest{public static void main(String[] args) {AA aa = new AA();aa.calculateTime();BB bb = new BB();bb.calculateTime();}}
    /*
    输出
    任务执行时间2
    任务执行时间2*/
    

  5. 接口入门

    package com.hspedu.interface_;public interface UsbInterface {//接口public void start();//这是抽象方法public void stop();
    }
    
    package com.hspedu.interface_;//Person 类实现UsbInterface
    public class Phone implements UsbInterface{//实现接口,就是把接口的方法实现@Overridepublic void start() {System.out.println("手机开始工作..");}@Overridepublic void stop() {System.out.println("手机停止工作..");}
    }
    
    package com.hspedu.interface_;public class Computer {//编写一个方法,计算机工作public void work(UsbInterface usbInterface){//通过接口来调用方法usbInterface.start();usbInterface.stop();}
    }
    
    package com.hspedu.interface_;public class ComputerTest {public static void main(String[] args) {//创建手机Phone phone = new Phone();//创建计算机Computer computer = new Computer();computer.work(phone);//把手机接入到计算机}
    }
    /*
    手机开始工作..
    手机停止工作..
    */

    接口就是给出一些没有实现的方法,封装在一起,到某个类要使用的时候,在根据具体情况把这些方法写出来

  6. package com.hspedu.interface_;public interface Ainter01 {//抽象方法public void say();//默认 ,jdk7和之前只能在接口中定义抽象方法default public void hi(){}//jdk8后可以定义默认还有静态方法public static void see(){}}
    

    在接口中静态默认方法也能定义default

  7. 接口注意事项

    1. 接口不能被实例化

    2. 接口中所有的方法是public方法(如果不写public还是public的,不会是默认的),接口中抽象方法,可以不用abstract修饰。

    3. 一个普通类实现接口,就必须将该接口的所有方法都实

    4. 抽象类实现接口,可以不用实现接口的方法

    5. 一个类同时可以实现多个接口

    6. 接口中的属性,只能是final的,而且是public static final 修饰符。比如:int a=1;实际上是public static final int a = 1;(必须初始化)

    7. 接口中属性的访问形式:接口名.属性名

    8. 接口不能继承其他的类,但是可以继承多个别的接口。

    9. 接口的修饰符只能是public 和默认,这点和类的修饰符是一样的

    10.  都正确,B实现A。

  8. 接口VS继承

    1. 继承当子类继承了父类,就自动的拥有父类的功能

    2. 如果子类需要扩展功能,可以通过实现接口的方式扩展

    3. 接口比继承更加灵活,

    4. 接口在一定程度上实现代码解耦(?接口规范性+动态绑定机制)

  9. 接口的多态特性

    1. 多态参数(实现了A接口的类,就能把该类传进形参是A接口(Phone实现了接口))

      package com.hspedu.interface_;public class Inter02 {public static void main(String[] args) {//接口类型的变量monster可以指向实现IA接口的对象实例IA monster = new Monster();}
      }
      interface IA{}
      class Monster implements IA{}
      class Car implements IA{}
      

      接口引用可以指向实现了接口的类的对象

    2. 多态数组

      package com.hspedu.interface_;public class Inter03 {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_) usbs[i]).call();//向下转型}}}
      }
      interface Usb{void work();
      }
      class Phone_ implements Usb{public void call(){System.out.println("手机可以打电话...");}@Overridepublic void work() {System.out.println("手机工作中...");}
      }
      class Camera_ implements Usb{@Overridepublic void work() {System.out.println("相机工作中....");}
      }

      怎么实现特有的方法

    3. 接口存在多态传递现象

      1. package com.hspedu.interface_;
        //演示多态传递现象
        public class Inter04 {public static void main(String[] args) {//接口类型的变量可以指向,实现了该接口的类的对象实例IG ig = new Teacher();IH ih = new Teacher();//不会报错,}
        }
        interface IH{void hi();
        }
        interface IG extends IH{//如果这没有继承,那么IH接口类型的变量不会指到Teacher类对象的}
        class Teacher implements IG{//通过上面的继承,这个Teacher也实现了IH接口@Overridepublic void hi() {}
        }
        

        接口多态传递

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

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

相关文章

Linux 操作系统原理 — PCIe 总线标准

目录 文章目录目录总线系统PCIe 总线PCIe 总线的传输速率PCIe 总线的架构PCIe 外设PCIe 设备的枚举过程PCIe 设备的编址方式BDF&#xff08;Bus-Device-Function&#xff09;编号BAR&#xff08;Base Address Register&#xff09;地址Linux 上的 PCIe 设备查看 PCIe 设备的 BD…

算法强化--两数之和

hi,大家好,今天为大家带来一道题目,求两数之和 题目 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一…

Python 进阶指南(编程轻松进阶):三、使用 Black 工具来格式化代码

原文&#xff1a;http://inventwithpython.com/beyond/chapter3.html 代码格式化是将一组规则应用于源代码&#xff0c;从而使得代码风格能够简洁统一。虽然代码格式对解析程序的计算机来说不重要&#xff0c;但代码格式对于可读性是至关重要的&#xff0c;这是维护代码所必需的…

【剑指offer|4.从尾到头打印单链表】

0.从尾到头打印单链表 单链表&#xff1a;一般给的都是无头节点的 另外&#xff1a;在面试中&#xff0c;如果我们打算修改输入的数据&#xff0c;则最好问一下面试官是不是允许修改 下面这种先把链表节点的值按链表序放到数组中&#xff0c;然后来一个算法库中的reverse属实有…

一文懂KL散度KL Divergence

本文翻译自https://naokishibuya.medium.com/demystifying-kl-divergence-7ebe4317ee68 KL散度中的KL全称是Kullback-Leibler&#xff0c;分别表示Solomon Kullback和Richard A.Leibler这两个人。 一、KL散度的定义 KL散度表明概率分布Q和概率分布P之间的相似性&#xff0c;由…

ARM Linux 内核启动1 —— 汇编阶段

一、Makefile分析 1、Makefile 分析 (1) kernel 的 Makefile 写法和规则等&#xff0c;和 uboot 的 Makefile 是一样的&#xff0c;甚至 Makefile 中的很多内容都是一样的。 (2) kernel 的 Makefile 比 uboot 的 Makefile 要复杂&#xff0c;这里我们并不会一行一行的详细分析…

【20】核心易中期刊推荐——计算机科学电子通信(EI索引)

🚀🚀🚀NEW!!!核心易中期刊推荐栏目来啦 ~ 📚🍀 核心期刊在国内的应用范围非常广,核心期刊发表论文是国内很多作者晋升的硬性要求,并且在国内属于顶尖论文发表,具有很高的学术价值。在中文核心目录体系中,权威代表有CSSCI、CSCD和北大核心。其中,中文期刊的数…

进阶C语言:文件操作

文件操作不仅仅是我们使用鼠标用来操作文件的各项功能&#xff0c;还可以使用C语言来操作文件的内容&#xff0c;可以使用C语言来对文件的读、写、拷贝...等等&#xff0c;话不多说&#xff0c;直接开始&#xff1a; 目录 1.为什么要使用文件 2.什么是文件 2.1程序文件 2.…

蓝桥杯【第14届省赛】Python B组

本题解不一定正确&#xff0c;欢迎大家指正 A&#xff1a;2023 【问题描述】 请求出在 12345678 至 98765432 中&#xff0c;有多少个数中完全不包含 2023 。 完全不包含 2023 是指无论将这个数的哪些数位移除都不能得到 2023 。 例如 20322175&#xff0c;33220022 都完全不包…

python实现获取当前目录下的树形结构

python实现获取当前目录下的树形结构 程序实现 在有些Linux上自带了tree命令来一树状结构显示一个目录&#xff0c;但是在有些linux上没有自带这个程序&#xff0c;所以这里用python写了一个小程序来实现这个功能&#xff0c;代码如下&#xff1a; import osdef print_tree(…

共模电感(扼流圈) 差模电感(扼流圈)

共模电感 共模电感&#xff0c;也叫共模扼流圈。常用于电脑的开关电源&#xff0c;过滤共模的电磁干扰信号。 共模电感器由软磁铁芯&#xff08;铁氧体磁芯&#xff09;和两组同相绕制的线圈组成。对于共模信号&#xff0c;由于两组线圈产生的磁场不是抵消。而是相互叠加&…

存量市场之下,电商之战深入腹地且逻辑未变

纵然是在流量依然见顶的大背景下&#xff0c;电商行业的竞争并未结束。无论是以百亿补贴为代表的烧钱策略&#xff0c;还是以跨境出海为代表的规模策略&#xff0c;几乎都是这样一种现象的直接体现。种种迹象表明&#xff0c;未来的电商行业&#xff0c;依然会有新的战役发生。…

Hadoop集群环境搭建与应用回顾

文章目录一、 实训项目名称二、 学习情况小结三、 项目中用到的知识点四、 实训项目中负责功能板块五、 实训项目实现六、 实训项目过程中遇到的问题及解决方法七、实训体会与心得一、 实训项目名称 Hadoop集群环境搭建与应用 二、 学习情况小结 实操一部分&#xff1a; 通…

linux 服务器 docker 安装 nacos 2.0.3

docker 镜像 https://registry.hub.docker.com/r/nacos/nacos-server/tags 1.下载nacos镜像 这里下载的是2.0.3 docker pull nacos/nacos-server:2.0.32.查看镜像是否下载成功 如下图 docker images3.创建文件夹 注&#xff1a; 自定义创建&#xff0c;用于把docker内部的文件…

【基金学习】基金的相关计算题目

文章目录一、基金收益计算1. 累计收益/持有收益2. 年化收益/年化收益率3. 涨跌幅4. 分红二、风险计算1. 贝塔系数2. 波动率三、费用计算1. 托管费2. 管理费3. 销售服务费4. 申购/赎回费一、基金收益计算 1. 累计收益/持有收益 累计收益 持仓金额 - 本金 累计收益率 &#xf…

TCP 的 NACK 与 SACK

可靠传输&#xff0c;一旦丢包&#xff0c;必然 HoL blocking&#xff0c;NACK 和 SACK 必须二选一驱动重传&#xff1a; NACK&#xff1a;receiver 主动通告没有收到的报文&#xff0c;sender 收到后重传。 SACK&#xff1a;receiver 主动通告收到的报文&#xff0c;sender …

一文带你深入了解算法笔记中的前缀与差分(附源码)

&#x1f4d6;作者介绍&#xff1a;22级树莓人&#xff08;计算机专业&#xff09;&#xff0c;热爱编程&#xff1c;目前在c&#xff0b;&#xff0b;阶段&#xff0c;因为最近参加新星计划算法赛道(白佬)&#xff0c;所以加快了脚步&#xff0c;果然急迫感会增加动力>——…

笔记本上就能跑的 LLM 好使吗?GPT4ALL 体验

是骡子是马&#xff0c;牵出来遛遛正名看到这个标题&#xff0c;你可能会觉得是噱头。谁不知道 ChatGPT 模型有 1750 亿以上的参数&#xff0c;别说是在笔记本电脑上跑&#xff0c;就是使用高性能 GPU 的台式机&#xff0c;也无法带得动啊。老老实实调用 API 不好吗&#xff1f…

torchvision.transforms 常用方法解析(含图例代码以及参数解释)

本文代码和图片完全源于 官方文档: TRANSFORMING AND AUGMENTING IMAGES 中的 Illustration of transforms&#xff0c;参数介绍源自函数对应的官方文档。 代码中的变换仅仅使用了最简单的参数&#xff1a;pad&#xff0c;size 等&#xff0c;这里展现的只是简单的变换&#xf…

中间表示- 数据流分析

数据流分析往往与优化绑定在一起&#xff0c;如下图所示。 优化的一般模式 程序分析 &#xff08;1&#xff09;控制流分析、数据流分析、依赖分析等。 &#xff08;2&#xff09;得到被优化程序的静态保守信息&#xff0c;是对动态运行行为的近似。 程序重写 以上一步得到…