Day16 面向对象进阶——接Day15

news2024/11/17 21:25:37

Day16 面向对象进阶——接Day15

文章目录

  • Day16 面向对象进阶——接Day15
    • 一、抽象类及抽象方法
    • 二、接口
    • 三、多态
    • 四、对象转型
    • 五、内部类

一、抽象类及抽象方法

//抽象类
public abstract class 类名{
    //抽象方法
    public abstract void method();
}

1、抽象方法交给非抽象的子类去实现(重写)

2、应用场景:当一个方法必须在父类中出现,但是这个方法又不好实现,就把该方法变成抽象方法,交给非抽象的子类去实现

3、面试题:
1.抽象类不能有构造方法?

​ 抽象类可以有构造方法

2.抽象类中只能有抽象方法?

​ 抽象类中有非抽象方法(成员方法和静态方法)

3.抽象类中不可以没有抽象方法?

​ 抽象类中可以没有抽象方法,但是毫无意义

4.如果父类是抽象类,则子类必须实现父类的抽象方法?

​ 不一定,子类如果是抽象类,可以不实现父类的抽象方法

5.可以使用new关键字来创建抽象类对象?

​ 不可以,创建的是匿名内部类的对象

二、接口

1、含义:特殊的抽象类

注意

  1. JDK1.7时,接口中只能有静态常量和抽象方法
  2. JDK1.8开始,接口中添加了静态方法和默认方法

2、应用场景:接口更像一个规范

3、 理解
3.1.接口是一个特殊的抽象类

  	 3. 2.JDK1.8之前,接口中只能有抽象方法及静态常量
  	3.3.JDK1.8开始,接口中允许使用抽象方法、静态常量、静态方法、默认方法

4、抽象类 vs 接口

​ 4.1. 抽象类:成员变量、静态变量、静态常量、成员方法、静态方法

​ 4.2 接口:静态常量、静态方法(JDK1.8)、默认方法(JDK1.8)

5、面试题:

​ 5.1.一个类可以实现多个接口?可以

​ 5.2.一个接口可以实现多个接口?不可以,接口与接口的关系是多继承

​ 5.3.接口里面的方法不一定都是抽象的?JDK1.7时接口里只能有抽象方法,JDK1.8时接口可以有抽象方法和默认方法

​ 5.4.接口解决了类的单继承问题?是的,因为类与类是单继承,类与接口是多实现

​ 5.5.一个类是否可以继承一个类并同时实现多个接口?可以

​ 5.6.接口可以new对象?接口是特殊的抽象类,但是本质还是抽象类,抽象类是不可以new对象的,接口也是不能new对象,new出来的匿名类内部类的对象

6、类 - 接口的关系:
6.1 类 - 类:单继承
6.2 类 - 接口:多实现
6.3 接口 - 接口:多继承

三、多态

1、理解:多种形态

2、分类:

​ 类的多态:子类对象指向父类引用(父类引用中存储的是子类对象在堆中开辟的地址)

​ 接口的多态:实现类对象指向接口的引用(接口的引用中存储的是实现类对象在堆中开辟的地址)

3、设计原则:前人总结的经验,告诉我们什么不该做

4、设计模式:前人总结的经验,告诉我们一步一步的怎么做

5、OCP原则:

​ O - Open - 在需求升级时,对于创建类是欢迎的

​ (因为创建类对于原来代码的影响几乎为0)

​ C - Close - 在需求升级时,对于改动原有类是拒绝的

​ (因为原有类之间的关系是趋于稳定状态,如果改动原有类,

​ 很有可能打破这种平衡,导致bug的出现)

​ P - Principle - 原则

6、优缺点:

​ 优点:提高程序的维护性,在需求升级/迭代时,不违反OCP原则

​ 缺点:不能调用子类独有的属性和方法

四、对象转型

1、自动转型 - 向上转型:子类类型 转 父类类型

注意

  1. 向上转型就是多态!!!

    1. 向上转型后,可以调用父类属性
    2. 向上转型后,可以调用父类方法
    3. 向上转型后,不可以调用子类独有的属性
    4. 向上转型后,不可以调用子类独有的方法
    5. 向上转型后,可以调用子类重写父类的方法

2、强制转型 - 向下转型:父类类型 转 子类类型

五、内部类

1、概念: 内部类(Inner Class)是定义在另一个类内部的类。内部类可以访问包含它的外部类的成员,包括私有成员,并且可以实现更加灵活和封装的设计。内部类分为四种类型:成员内部类、静态内部类、局部内部类和匿名内部类。

2、理解:一个类中再声明另外一个类

3、分类:

  1. 成员内部类

    1. 静态内部类
    2. 接口内部类
    3. 局部内部类
    4. 匿名内部类

4、应用场景:

  1. B类的对象只在A类中使用,并且B类对象使用到了A类所有的属性,就可以将B类作为A类的成员内部类
  2. B类的对象只在A类中使用,并且B类对象使用到了A类静态的属性,就可以将B类作为A类的静态内部类
  3. 抽象类的子类只创建一次对象,就没必要创建子类,直接使用匿名内部类(new 抽象类)
  4. 接口的实现类只创建一次对象,就没必要创建实现类,直接使用匿名内部类(new 接口)

5、举例:

public class OuterClass {
   private int outerField = 10;

   public void outerMethod() {
       System.out.println("Outer method");
   }

   public class InnerClass {
       public void innerMethod() {
           System.out.println("Inner method");
           System.out.println("Accessing outerField from inner class: " + outerField);
           outerMethod();
       }
   }

   public static void main(String[] args) {
       OuterClass outerObject = new OuterClass();
       OuterClass.InnerClass innerObject = outerObject.new InnerClass();
       
       innerObject.innerMethod();
   }
}

分析: 在这个例子中,OuterClass包含一个内部类InnerClass。内部类可以访问外部类的成员变量outerField和方法outerMethod。在main方法中,我们首先实例化外部类对象outerObject,然后使用它来实例化内部类对象innerObject,最后调用内部类的方法innerMethod来展示内部类访问外部类成员的例子。

局部内部类内存图:局部内部类内存图
匿名内部类内存图1:
在这里插入图片描述
匿名内部类内存图2:
在这里插入图片描述

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

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

相关文章

轻松驾驭时间流:MYSQL日期与时间函数的实用技巧

​🌈 个人主页:danci_🔥 系列专栏:《MYSQL应用》💪🏻 制定明确可量化的目标,坚持默默的做事。 轻松驾驭时间流:MYSQL日期与时间函数的实用技巧 MYSQL日期时间函数是数据库操作中不可…

第五十八回 吴用赚金铃吊挂 宋江闹西岳华山-飞桨图像分割套件PaddleSeg初探

鲁智深被贺太守抓住,押入死牢。武松得信后,正想回梁山报信,正好戴宗来了,就请戴宗赶快回梁山搬救兵。宋江说兄弟有难,怎能不救? 于是带了十六个头领来到少华山。 因为华州城池厚壮,宋江等无计可…

Selenium 自动化 —— 入门和 Hello World 实例

Selenium 是什么 Selenium 是一个用于自动化网页浏览器操作的工具,它支持多种浏览器和多种操作系统。主要用于测试 web 应用程序的功能,也可用于执行一些基本的浏览器操作任务,例如自动化表单填写、网页导航等。 Selenium 是一个开源项目&a…

扒带和扒谱的区别 FL Studio怎么扒带 扒带编曲制作 扒带简单歌曲

在许多业余音乐爱好者们的眼里,扒带和扒谱是同一种东西。诚然,扒带和扒谱的确非常相似,但是从严格的意义上来说,这二者还是有一定的区别。今天我们就来说一说扒带和扒谱的区别,FL Studio怎么扒带。 FL Studio21中文官网…

.Net使用ElasticSearch

文章目录 前言主体内容一.Kibana中ElasticSearch的基础操作1.GET(查询)1.POST(新增)1.PUT(修改)1.DELET(删除) 二.在.Net中,对ElasticSearch进行基础操作1.DotNet连接Ela…

Docker常见指令

1.docker search mysql :从docker镜像仓库搜索和mysql有关的镜像 docker search mysql 2.docker pull mysql :从docker仓库拉取mysql镜像 docker pull mysql 3.docker run mysql :启动mysql镜像 docker run mysql 4.docker ps &#xff…

C语言学习--字符和字符串

目录 1.字符 字符输入--scanf 字符输入--getchar 2.字符串 字符串输入--scanf 字符串输入--gets 1.字符 字符输入--scanf C语言scanf输入时缓冲区问题 scanf函数是标准输入流(从键盘接收数据),接收的数据放入输入缓冲区中,其中就包括…

粒子群算法对pi控制器进行参数优化,随时优化pi参数以控制直流无刷电机转速。

粒子群算法对pi控制器进行参数优化,随时优化pi参数以取得设定直流无刷电机转速。 PSO优化PID,用于BLDC速度控制 仿真平台为:MATLAB 采用的是Simulinkm程序相配合 仿真结果以及程序示例:

通过NFS 实现windows共享linux目录

一、配置WIndows 1.进入程序和功能 2.勾选NFS服务,安装客户端 二、安装NFS Service 在ubuntu 1.查看apt源是否存在nfs服务端安装包 sudo apt-cache madison nfs-kernel-server 2. 安装nfs-kernel-server sudo apt install nfs-kernel-server 3.建立共享目录&…

15.WEB渗透测试--Kali Linux(三)

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于: 易锦网校会员专享课 上一个内容:14.WEB渗透测试--Kali Linux(二)-CSDN博客 Kali工具使用 3389远…

ArrayList 和 LinkedList 有什么区别?

1、典型回答 ArrayList 和 LinkedList 是 Java 中常用的集合类,它们都实现了 List 接口,如下图所示: 但二者有以下几点不同: 1、底层数据结构实现不同: ArrayList 底层使用数组实现,它通过一个可调整大小…

程序员注意“进厂”时机!!鸿蒙生态已进入第二发展阶段

自打今年1月份鸿蒙宣布星河版发布后,已经有200家大型互联网企业展开鸿蒙原生合作。就在今天的3月14日,继钉钉、高德、淘宝、UC浏览器、夸克等app应用启动鸿蒙原生开发后。又迎来阿里旗下多款应用与华为举行鸿蒙合作签约仪式,宣布将基于Harmon…

如何更简捷地在 Java 中进行函数式编程

public static void findNemo(List names) { boolean found false; for(String name : names) { if(name.equals(“Nemo”)) { found true; break; } } if(found) System.out.println(“Found Nemo”); else System.out.println(“Sorry, Nemo not found”); } …

【文献阅读】A Fourier-based Framework for Domain Generalization(基于傅立叶的领域泛化框架)

原文地址:https://arxiv.org/abs/2105.11120 摘要 现代深度神经网络在测试数据和训练数据的不同分布下进行评估时,存在性能下降的问题。领域泛化旨在通过从多个源领域学习可转移的知识,从而泛化到未知的目标领域,从而解决这一问…

“禁止互撕”新规第二天,热搜把#章子怡“怒怼”网友#推上了榜一

3月12日,微博热搜发布公告,对热搜词条处置规则进行了更新。 针对热搜词条长期以来存在的引战互撕、挑唆对立等不良现象,热搜生态秩序亟待改善,微博给出了两大解决方案: 一是更新热搜词条处置规则,当热搜词…

吴恩达机器学习笔记 二十 机器学习开发过程 增加数据

选择结构(模型、数据等)-->训练模型-->诊断(偏差、方差、误差分析) 增加数据 1.增加全新的 x、y 2.数据增强(data augumentation) 3.数据合成(data synthesis) 目前算法和模型已经比较完善了,可以考虑专注设…

mac系统下GCC优化编译的使用

mac系统下GCC优化编译的使用 编译流程 预处理:g -E homework.cpp -o homework.i 编译:g -S homework.i -o homework.s //.s为汇编文件 汇编:g -c homework.s -o homework.o 链接:g homework.o -o homework 优化选项 -O0&#…

陷入“3·15”旋涡的两轮电动车,急需降“火”

正值备受关注的“315”国际消费者权益日,此前陷入“火灾风波”的两轮电动车,又一次回到舆论中心。 最近,市场监管总局发布电动自行车消费提示,目的是帮助消费者科学购买和使用相关产品,防范可能发生的安全风险。其中提…

【深度学习】diffusers 学习过程记录,StableDiffusion扩散原理

教程地址:https://huggingface.co/docs/diffusers/quicktour 文章目录 环境扩散模型噪声残差的作用原理,文字编码如何给入Unetschedulerguidance_scalescheduler.init_noise_sigma训练时候的反向传播 环境 python3.10安装环境: pip install…

影城管理系统|基于springboot框架+ Mysql+Java+B/S架构的影城管理系统设计与实现(可运行源码+数据库+设计文档+部署说明)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 目录 前台功能效果图 管理员功能登录前台功能效果图 系统功能设计 数据库E-R图设计 lunwen参考 摘要 研究…