当前位置: 首页 > article >正文

JavaSE第八天

一、继承之super关键字

super关键字:

  • 一个引用变量,用于引用父类对象

  • 父类和子类都具有相同的命名方法,要调用父类方法时使用

  • 父类和子类都具有相同的命名属性,要调用父类中的属性时使用

  • super也是父类的构造函数,格式 super(参数),并且调用super() 必须是类构造函数中的第一条语句,否则编译不通过

注意:1、每个子类构造方法的第一条语句,都是隐含地调用super(),如果父类没有这种形式(无参构造函数)的构造函数,那么在编译的时候就会报错

2、this()和super()都指的是对象,均不可以在static环境中使用,包括:static变量,static方法,static语句块。

构造函数里面的 super和this:

  • this 和super在构造函数中只能有一个,且都必须是构造函数当中的第一行

  • 当父类的构造函数是无参构造函数时,在子类的构造函数中,不用显式super()去调用父类的构造函数,

  • 当父类的构造函数是有参构造函数时,如果子类的构造函数中不写super()进行调用父类的构造函数,编译器会报错

二、抽象之abstract关键字

抽象:

  • 当父类的某些方法不确定时,可以用abstract关键字来修饰该方法,即抽象方法,用abstract来修饰该类,即抽象类

  • 抽象类将事物的共性的东西提取出来,由子类继承去实现,代码易扩展、易维护

抽象特点:

  • 抽象类的特点

    • 抽象类不能被实例化,因为抽象类中方法未具体化,这是一种不完整的类,所以不能直接实例化,编译无法通过

    • 抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类

    • 如果一个抽象类中可以没有抽象方法,这样做的目的是为了此类不能被实例化。

    • 抽象类的子类必须给出抽象类中的抽象方法的具体实现,否则子类也是抽象类,需要用abstract声明

    • 抽象类不能使用final关键字修饰,因为final修饰的类是无法被继承

  • 抽象方法的特点

    • 抽象类中的抽象方法只是声明,不包含方法体

    • 抽象方法不能用private修饰,因为抽象方法必须被子类实现(覆写),而private权限对于子类来说是不能访问的

    • 一个类继承了一个抽象类,那么它必须全部覆写抽象类中的抽象方法当然也可以不全部覆写

    • 如果不覆写全部抽象方法则这个子类也必须是抽象类

  • 构造方法,类方法(即static 修饰的方法)不能声明为抽象方法

三、接口之interface关键字

接口:

  • 是抽象方法的集合,接口通常以interface来声明,一个类通过继承接口的方式,从而来继承接口的抽象方法

  • Java 8及以后,还可以包含默认方法和静态方法,不包含方法的实现

  • 作用

    • 解耦:接口定义了对象之间的契约,使得不同类之间的交互更加清晰和灵活。

    • 多重继承:通过实现多个接口,一个类可以继承多个接口中的方法,实现类似多重继承的功能。

    • 定义规范:接口定义了一组方法的集合,实现了该接口的类必须遵循这些方法的定义。

接口定义:接口使用interface来定义,接口中的方法都是隐式抽象的(不需要abstract关键字),且都是public的(没有明确指定)。

接口实现:类可以使用implements关键字来实现一个或多个接口;如果一个类实现了某个接口,那么它必须实现该接口中的所有抽象方法,除了默认方法和静态方法。

接口和抽象类区别:

1、抽象类可以有方法的具体实现,而接口中的方法都是抽象的(除了默认方法和静态方法)。

2、抽象类可以有构造方法,而接口不能有构造方法。

3、一个类只能继承一个抽象类,但可以实现多个接口。

4、接口主要用于定义规范,而抽象类主要用于代码的复用

四、InstanceOf关键字

InstanceOf 关键字:在Java中,instanceof是一个运算符,用于测试对象是否是一个类的实例,或者对象的超类或接口的一个实例;且在运行时判断对象是否是一个类的实例,返回truefalse

注意:

1、使用instanceof时,要确保对象引用变量不是null,否则将会抛出NullPointerException

2、在使用instanceof进行类型判断后,如果需要进行类型转换,应该使用强制类型转换(如(ClassName) obj)。


http://www.kler.cn/a/507812.html

相关文章:

  • 网络IO与IO多路复用
  • MySQL 事务
  • 读取长文本,使用读取底表
  • JAVA实现五子棋小游戏(附源码)
  • 【0393】Postgres内核 checkpointer process ③ 构建 WAL records 工作缓存区
  • openharmony标准系统方案之瑞芯微RK3568移植案例
  • 软件工程师欧以宁:引领无人机导航与物联网安全的技术革新
  • ToDesk设置临时密码和安全密码都可以当做连接密码使用
  • Mimikyu靶场刷题记录
  • 浅谈云计算21 | Docker容器技术
  • 深入探究 Vue 3 中动态组件加载与性能优化
  • git详细使用教程
  • C# Common.Utility
  • C# Sleep() vs Wait():到底用哪个?
  • Swift语言的多线程编程
  • Python编程与在线医疗平台数据挖掘与数据应用交互性研究
  • JavaScript,ES6,模块化,大程序文件拆分成小文件再组合起来
  • vue3学习三
  • 网络安全 | 防护技术与策略
  • 客户案例 | Ansys与索尼半导体解决方案公司合作推进自动驾驶汽车基于场景的感知测试
  • C# 获取PDF文档中的字体信息(字体名、大小、颜色、样式等
  • Android系统定制APP开发_如何对应用进行系统签名
  • Android 北斗与平台芯片相关
  • PLC(电力载波通信)网络机制介绍
  • Qt——QTableWidget 限制单元格输入范围的方法(正则表达式输入校验法、自定义代理类MyItemDelegrate)
  • Go语言strings包与字符串操作:从基础到高级的全面解析