JAVA基础知识(四)

2023-05-16

目录

  • 1.抽象类、抽象方法
  • 2.接口interface
  • 3.多态
  • 4.对象转型
  • 5.内存分析
  • 6.设计原则
  • 7.单例设计模式

1.抽象类、抽象方法

1.抽象方法和抽象类必须使用abstract修饰符修饰,有抽象方法的类只能被定义成抽象类(即方法修饰词为abstract时,类修饰词也必须为abstract),抽象类里可以没有抽象方法。

抽象方法和抽象类的规则:

1)抽象类和抽象方法必须使用abstract修饰,抽象方法不能有方法体。

2)抽象类不能被实例化。

3)抽象类可以包含成员变量,方法(普通方法和抽象方法都可以),构造器,初始化块,内部类(接口、枚举)。抽象类的构造器不能创建该类实例,主要是为了让子类调用。

4)含有抽象方法的类(定义了一个抽象方法;或继承了一个抽象父类,但没有完全实现父类包含的抽象方法;或实现了一个接口,但没有完全实现接口包含的抽象方法的三种情况)只能被定义为抽象类。

  • 面试题:
    • 1.可以使用new关键字来创建抽象类对象?不可以,创建的是一个匿名内部类
    • 2.抽象类中只能有抽象方法?不一定,可以有非抽象方法
    • 3.抽象类中可不可以没有抽象方法?可以没有抽象方法,但是这样是没有意义
    • 4.如果父类是抽象类,则子类必须重写父类的抽象方法?不一定,子类如果是抽象类,可以不去重写
    • 5.抽象类不能有构造方法?有构造方法
    • 6.抽象类不能new对象,拿构造方法有什么用?1.将抽象类里的属性存放在本对象中。 2.初始化数据
    • 7.抽象方法必须在抽象类中?必须

2.接口interface

接口:一种特殊的抽象类

  • 接口相关:
    *接口里只有静态常量和抽象方法(java8开始可以有具体方法,但是只能是default和static的)
    * 接口创建:Interface
    * 一个类去实现接口:implements
    * Java里:类-类是单继承,类-接口是多实现,接口-接口是多继承
    * 接口是不能被创建对象的,创建的是他的匿名内部类

  • 接口的应用场景:
    * 1.抽象类中,如果只有静态常量或抽象方法时,用接口代替,因为类-类是单继承,类-接口多实现
    * 2.常量接口

  • 面试题:

    • 1.一个类可以实现多个接口?可以
    • 2.一个接口可以实现多个接口?不可以
    • 3.一个接口可以继承多个接口?可以
    • 4.接口里面的方法不一定都是抽象的?必须是抽象方法(java8开始可以有具体方法,但是只能是default和static的)
    • 5.接口解决了类的单继承问题? 对的
    • 6.一个类是否可以继承一个类并同时实现多个接口?可以

3.多态

所谓多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。因为在程序运行时才确定具体的类,这样,不用修改源程序代码,就可以让引用变量绑定到各种不同的类实现上,从而导致该引用调用的具体方法随之改变,即不修改程序代码就可以改变程序运行时所绑定的具体代码,让程序可以选择多个运行状态,这就是多态性。
抽象类的多态:子类对象指向父类引用

Teacher t = new Teacher();
JiaoTongTools tools = new Plane();
t.open(tools);
System.out.println("欣赏沿途的风景...");
t.close(tools);

接口的多态:实现类对象指向接口引用

Computer computer = new Computer();
IUSB usb = new Disk();//面向接口编程
computer.connect(usb);

4.对象转型

1.向上转型:子类转父类
可以获取父类属性和方法
不可以获取子类属性和方法
可以调用子类重写父类的方法

   Animal an = new Dog();

2.向下转型(不安全):父类转子类

   Animal an = new Dog();
   if(an instanceof Dog){
     Dog dog =  (Dog) an;
   }else if(an instanceof Cat){
     Cat cat =  (Cat) an;
   }
   注意:下转型时,一定用instanceof判断  
   ClassCastException:类型转换异常

5.内存分析

在这里插入图片描述

6.设计原则

单一职责原则:就是所谓的“高内聚,低耦合”,也就是说每个类应该只有一个职责,对外只提供一种功能,而引起该类变化的原因也应该只有一个。
开闭原则:对扩展开发,对修改关闭,对功能的扩展是通过增加代码来进行的,而非修改原有的类代码。
里氏替换原则:在任何父类出现的地方,都可以用它的子类来替换
依赖注入原则:要依赖抽象,而不是依赖于具体的实现
接口分离原则:不应该强迫子类实现他们不需要使用的方法,一个接口应该只提供一种对外的功能,不要把所有的方法都封装到一个接口中,还是可以从分层的角度来理解。
迪米特原则:一个对象应该对其他对象尽可能少的了解,也就是说要降低对象之间的耦合度,面向接口来编程,不理会其内部的工作原理

7.单例设计模式

单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,应用该模式的类一个类只有一个实例。即一个类只有一个对象实例。

具体实现:

(1)将构造方法私有化,使其不能在类的外部通过new关键字实例化该类对象。

(2)在该类内部产生一个唯一的实例化对象,并且将其封装为private static类型。

(3)定义一个静态方法返回这个唯一对象。

饿汉式单例:

/**
 * 单例模式 -- 饿汉式
 *
* 优点:线程安全
* 缺点:占内存
 */
public class MyClass {
  
   private static MyClass my = new MyClass();
   private MyClass(){}
   public static MyClass getInstance() {
          return my;
   }
   public static void eat(){}    
}

懒汉式单例:

/**
 * 单例模式 -- 懒汉式
 *
* 优点:不占内存
* 缺点:线程不安全
 *
*/
public class MyClass {
  
   private static MyClass my = null;
   private MyClass(){}
   public static MyClass getInstance() {
          if(my == null){
                 my = new MyClass();
          }
          return my;
   }
  
   public static void eat(){}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JAVA基础知识(四) 的相关文章

  • salesforce 接口国内访问慢的解决方案

    最近接到一个客户 xff0c 他们需要用salesforce作为ToC的后端 xff0c 由salesforce直接提供api给前端页面 我们知道一般做salesforce的 xff0c 基本上是作为公司内部应用系统来使用的 xff0c 即
  • sql server跨库连接

    exec sp addlinkedserver kd SQLOLEDB 127 0 0 1 exec sp addlinkedsrvlogin kd 39 false 39 null 39 用户名 39 39 密码 select from
  • shell初探(一)

    1 文件夹创建 span class token function mkdir span p my sheel mkdir是在当前目录下创建文件夹 xff0c p是递归创建目录 2 编辑文件 span class token functio
  • shell初探(二)

    1 if条件语句 一般数值判断用到逻辑运算符 gt lt 的用双小括号 span class token shebang important bin bash span age1 span class token operator 61 s
  • shell初探(三)

    前面学了简单的shell编程 xff0c 那今天我们就根据前面学到的内容 xff0c 写一个小demo练习一下 需求 学生成绩录入查询系统 xff0c 带简单筛选功能 代码 span class token shebang importan
  • shell初探(四)

    1 for循环 循环1 100的数字 xff0c 并输出 span class token keyword for span span class token variable span class token punctuation sp
  • Idea 热部署 devtool

    第一步引入jar span class token generics function span class token punctuation lt span dependency span class token punctuation
  • zookeeper安装及遇到的问题解决

    一 安装 1 下载地址 http mirror bit edu cn apache zookeeper 2 定位到文件并解压 span class token function cd span data myzookeeper span c
  • 重签名ipa步骤及工具

    au signer win工具可以实现在Windows电脑直接重签名ipa xff0c 无需苹果电脑 xff01 对现用的ipa文件进行重签 xff0c 实现达到可以安装自己苹果手机的目的 扩展功能可以设置签名时间控制 xff0c 可以去除
  • Linux下Nacos安装集群配置及Mysql持久化配置

    安装配置1个ngix 43 3个nacos注册中心 43 1个mysql 一 Nacos下载安装 1 下载地址 xff1a https github com alibaba nacos releases tag 1 3 1 2 解压 把下载
  • centos 安装redis踩的两个坑

    redis 安装就不说 xff0c 面向百度编程 xff0c 主要记录下两个重要的点 xff1a 1 设置redis 密码 找到redis安装目录 xff0c 进入下面的bin目录 xff0c 找到redis conf文件 编辑redis
  • centos7安装mysql 8.0 简单全过程

    一 安装 依次执行以下命令 xff0c 遇到选项选Y span class token function sudo span yum localinstall https repo mysql com mysql80 community r
  • nacos注册地址服务名找不到问题记录

    项目构成 xff0c nacos 43 gateway 43 openfeigns xff0c 在做配置的时候使用服务名 xff08 spring application name xff09 找不到服务器 问题解决 xff1a 调用的微服
  • 做设计师还是程序员?一张图你就明白!

    平时大家相安无事 xff0c 可一旦项目滑了水 栽了坑 二重奏就开始没完没了的唱起来了 请看下图 xff1a 你的桌子是有什么 小编反手一摸 xff0c 还好小编的头发还再 你头发呢 xff1f 相信这里有很多学习java的朋友 xff0c
  • 查看数据库当前编码【Mariadb、Mysql、Flask】

    情景 在centos下部署flask项目 xff0c 使用的是mariadb xff0c xff08 本地mysql香香的 xff09 xff0c 用到sqlarchemy xff0c 插入前中文 xff0c 出入后查询乱码 xff0c 最
  • JVM之调优篇

    内存泄漏与内存溢出 内存溢出 指在程序申请内存时 xff0c 没有足够的内存可以分配 xff0c 就是OOM xff0c 即使垃圾回收之后也不能有足够的空间分配 内存泄漏 Memory Leak 是指在程序运行后 xff0c 没有释放所占用
  • 使用document解析xml文件

    在慕课上课时 xff0c 看到可以使用document来解析xml文件 xff0c 把上课的代码放出来 xff0c 先记录一下 大概步骤如下 xff1a 1 使用DocumentBuilderFactory 创建对象后再创建Document
  • 【STM32】HAL库开发教程(四)—串口FIFO使用

    前言 不必害怕未知 xff0c 无需恐惧犯错 xff0c 做一个Creator xff01 本文主要介绍STM32 HAL库开发中串口 FIFO的使用 一 开发步骤 1 Cubemx配置 在左侧引脚配置栏选择目标串口号在串口模式处配置串口模
  • mysql报错ORDER BY clause is not in SELECT list, references column ‘‘which is not in SELECT list解决方案

    mysql报错Expression 1 of ORDER BY clause is not in SELECT list references column 39 fusion m create time 39 which is not i
  • 文件管理

    彩蛋 操作系统总目录 戳我 文章目录 1 初始文件管理2 文件的逻辑结构无结构文件有结构文件顺序文件是否可以实现记录的随机存取变长记录定长记录 索引文件索引顺序文件多级索引顺序文件 3 文件目录文件控制块需要对目录进行哪些操作 目录结构单级

随机推荐

  • 设备管理

    彩蛋 操作系统总目录 戳我 文章目录 I O设备的基本概念与分类什么是I 0设备 I O设备分类按使用特性分类按照传输速度分类按照信息交换的单位分类 I O控制器I 0设备的机械部件I 0设备的电子部件 I 0控制器 I O控制器的组成内存
  • 进程管理

    彩蛋 操作系统总目录 戳我 进程 进程的概念 进程的定义 程序 就是一个指令序列 程序段 数据段 PCB三部分组成了进程实体 进程映像 一般情况下 xff0c 我们把进程实体就简称为进程 例如 xff0c 所谓创建进程 xff0c 实质上是
  • 哲学家进餐问题

    文章目录 哲学家进餐问题问题描述问题分析思想三代码小结 哲学家进餐问题 问题描述 一张圆桌上坐着5名哲学家 xff0c 每两个哲学家之间的桌上摆一根筷子 xff0c 桌子的中间是一碗米饭 哲学家们倾注毕生的精力用于思考和进餐 xff0c 哲
  • 进程同步和互斥

    彩蛋 操作系统总目录 戳我 文章目录 进程互斥的硬件实现方法中断屏蔽方法TestAndSet指令Swap指令小结 信号量机制信号量机制 整型信号量信号量机制 记录型信号量小结 用信号量机制实现信号量机制实现进程互斥信号量机制实现进程同步信号
  • Java Future

    Callable Doug Lea 大师 xff0c 在1 5的杰作 span class token comment 64 see Executor 64 since 1 5 64 author Doug Lea 64 param lt
  • 布隆过滤器

    网页黑名单 垃圾邮件过滤系统 爬虫网站判重 哈希函数 特征 xff1a 典型的哈希函数都有无限的输入值域 当给哈希函数传入相同的输入值时 xff0c 返回值一样 当给哈希函数传入不同的输入值时 xff0c 返回值可能一样 xff0c 也可能
  • mysql45讲知识框架图

    1 一条SQL查询语句是如何执行的 xff1f 在有些场景下 xff0c 执行器调用一次 xff0c 在引擎内部则扫描了多行 xff0c 因此引擎扫描行数跟rows examined并不是完全相同的 主要讲述mysql 服务器和存储引擎之间
  • session 和 cookie

    一 区别 存储位置不同 xff1a session 存储在服务器端 xff1b cookie 存储在浏览器端 安全性不同 xff1a cookie 安全性一般 xff0c 在浏览器存储 xff0c 可以被伪造和修改 容量和个数限制 xff1
  • R语言中的igraph包绘制网络图

    本文转自网络 R语言中的igraph包可以很方便地画出网络图 xff0c 在社交关系分析等领域发挥重要作用 xff0c 下面介绍包中一个重要的函数graph from data frame xff08 xff09 graph from da
  • OnNewIntent四种启动模式下的调用时机

    Activity启动模式 Intent Flags taskAffinity task和back stack总结 1 singleInstance模式 第一次进入 xff1a onCreate onStart 在栈顶再次进入 xff1a o
  • windows10 Ubuntu 双系统安装及美化详细步骤

    Windows 10 Ubuntu 双系统安装踩坑实录 写在前面背景介绍 硬件介绍安装 Ubuntu下载镜像文件 制作启动盘安装步骤 安装必备软件混凝土长方形实体逾越工具安装 Nvidia 显卡驱动远程连接工具即时通讯中文输入法 美化 Ub
  • 如何优雅地停止java程序

    方法一 span class token class name System span span class token punctuation span span class token function exit span span c
  • 删除数组里面的某一个值

    Array prototype remove span class token operator 61 span function span class token punctuation span val span class token
  • ASP.NET中实现点击不同菜单项,在当前页面显示其对应内容

    疑惑 xff1a 用ASP NET开发项目时 xff0c 若想要实现这样的界面 xff1a 顶部是导航栏 xff0c 有多个菜单项 xff0c 点击不同的菜单项后 xff0c 下方显示对应的内容页面 xff1b 或者是左侧是菜单栏 xff0
  • 解决error ‘XXX‘ is not defined no-undef且项目没有eslintrc.js文件问题

    问题描述 这是因为eslint的语法校验导致的问题 xff0c 文件是通过public的index html中 lt script src 61 34 xxxxxx js 34 gt lt script gt 引入的 xff0c 没有定义全
  • CentOS7 下MariaDB安装与简单配置(最新)

    前言 MySQL和MariaDB的区别 xff1a LAMP架构盛极一时 xff0c 这离不开MySQL的免费与易用 xff0c 但是在Oracle收购了Sun之后 xff0c 很多公司开始担忧MySQL的开源前景 xff0c 而最近Ora
  • JAVA基础知识(一)

    目录 1 java的数据类型类型之间的转换 xff08 自动转型 强制转型 特殊点 xff09 2 运算符2 1算术运算符2 2逻辑运算符2 3关系运算符2 4赋值运算符2 5三目运算符2 6位运算符 3 运算符的优先级4 表达式5 转义字
  • JAVA基础知识(二)

    目录 1 循环遍历2 排序算法2 1 冒泡排序2 2 选择排序2 3插入排序 3 数组的查找3 1顺序查找3 2二分查找 xff08 折半查找 xff09 4 Arrays工具类5 可变参数 1 循环遍历 JAVA中的常用的循环遍历有for
  • JAVA基础知识(三)

    目录 1 JAVA关键字1 1关键字 xff1a private1 2关键字 xff1a this1 3关键字 xff1a static1 4关键字 xff1a super1 5关键字 xff1a final 2 继承继承中的构造方法 3
  • JAVA基础知识(四)

    目录 1 抽象类 抽象方法2 接口interface3 多态4 对象转型5 内存分析6 设计原则7 单例设计模式 1 抽象类 抽象方法 1 抽象方法和抽象类必须使用abstract修饰符修饰 xff0c 有抽象方法的类只能被定义成抽象类 x