Java SE-核心-抽象类

抽象类的使用
接口
总结
Objects类

抽象类的使用
  • 不能直接new创建抽象类对象
  • 必须使用子类继承抽象类
  • 子类必须重写覆盖父类中所有的抽象方法
  • 创建子类对象进行使用
  • 抽象类中可以有抽象方法,在创建子类对象时会自动调用抽象类的构造方法,或是可以通过在子类构造方法中调用
  • 若子类没有全部实现抽象类中抽象方法,那么子类必须是抽象类我i
发红包案例图解

在这里插入图片描述

接口
接口概述
  • 接口就是一种公共的规范标准
  • 接口是一种引用的数据类型
  • 编译生成的代码仍是class文件
接口中抽象方法
  • 不可以写大括号方法体
  • 方法默认都为public abstract 可以全省略也可以省略部分
接口实现方式
  • 接口不能直接使用,必须有一个实现类来实现该接口
  • 实现接口的实现类必须重写接口中的所有抽象方法,若没有全部实现,则该类必须是抽象类
接口的默认方法
  • 在jdk1.8开始,接口里允许定义默认方法
  • 抽象方法可以有方法体
  • 接口中默认方法,可以解决接口升级的问题
  • 可以通过接口的实现类对象直接调用
  • 也可以被接口实现类进行覆盖重写
  • 默认方法会被实现类继承下去
  • 注意:所谓的接口升级:当接口的所有实现类都已实现,入突然在接口中添加一个抽象方法时,那么实现类等等还需要重写添加的该方法,这是可以在接口中添加一个默认方法,那么通过接口的实现类对象调用可以直接使用,也可以在接口的实现类中重写该方法
接口中静态方法
  • 用接口名.方法名直接调用
  • 可以有方法体
接口中的私有方法
  • 在jdk9中接口中可以定义私有方法
  • 1、普通私有方法
  • 解决多个默认方法重复代码的问题
  • 2、静态私有方法
  • 解决多个静态方法之间的重复代码问题
  • 注意:是为了解决方法中的重复代码问题,当接口中多个方法有共同代码,可以将这些共同代码抽取出来,作为一个共有方法但是这个共有方法若不定义为private类型,可以被实现类对象直接调用,这样很不恰当,所以可以将这个方法被private修饰
接口中变量
  • 接口中变量都被public static final 修饰
  • 变量在定义时必须初始化
  • 命名规则:大写字母加下划线
  • 通过接口名.变量名调用
总结
成员变量
  • 成员变量定义时必须初始化,且一旦定义不可改变
  • 命名规则使用大写字母加下划线
抽象方法
  • 实现类必须覆盖重写抽象类中的所有抽象方法,除非实现类是抽象类
默认方法
  • 从jdk8开始,Java中允许定义默认方法,且实现类默认继承默认方法默认方法也可以被覆盖重写
  • pubic default 返回值类型 方法名(参数列表){方法体};
静态方法
  • 从jdk8开始,Java允许定义静态方法,应该通过接口名.方法名调用,不能通过实现类对象调用
  • public static 返回值类型 方法名(参数列表)(方法体);
私有方法
  • 从jdk9开始,Java允许定义私有方法,只有接口自己调用,不能被实现类和其他类调用
  • 普通私有方法:private 返回值类型 方法名(参数列表){方法体};
  • 静态私有方法:private static 返回值类型(参数列表){方法体};
注意
  • 接口中没有静态代码块
  • 接口中没有构造方法
  • 实现类中继承了多个接口,有重复的抽象方法,只需要覆盖重写一次
  • 实现类的多个接口中存在重复的默认方法,那么实现类一定要对冲突的默认方法重写
  • 如果一个类的直接父类中和接口的默认方法产生了冲突,优先使用父类中的方法(继承优先实现)

总结

  • 类与类之间是单继承,父类只有一个
  • 类与接口之间是多实现的,一个类可以有多个接口
  • 接口与接口之间是多继承的
接口的多继承
  • 多个父接口中的抽象方法如果重复没关系
  • 多个父接口中的默认方法如果重复,那么子接口必须进行默认方法的覆盖重写,而且必须待default关键字
向上转型
  • 父类引用指向子类对象,是安全的
向下转型
  • 将父类对象还原为本来的子类对象
图解

在这里插入图片描述

  • 注意事项:必须保证对象本来创建的时候,就是猫,才能向下转型成为猫
  • 如果对象创建的时候不是猫,现在非要向下转型为猫则要报错
  • 再基本类型中称为强制类型转换,而引用类型中称为转型
instanceof关键字
  • animal instanceof Dog
  • 判断父类引用animal本来是不是Dog类型
final关键字
  • 被final修饰的类时,该类不能被继承
  • 被final修饰的方法时,该方法不能被覆盖重写
  • 被final修饰的局部变量,该变量内容不能被修改,而且要确保一次赋值,定义变量时初始化或仅仅赋值一次
  • 对于被final修饰的成员变量,要么直接定义时初始化要么再构造方法中赋值
Java权限修饰符

在这里插入图片描述

内部类
  • 内部类在文件中名称:外部类$内部类
权限修饰符的使用选择
  • 外部类:public/(default)
  • 成员内部类:public/protected/(default)private
  • 局部内部类:什么都不能写
注意:
  • 局部内部类,如果希望访问所方法的局部变量,那么这个局部变量必须是有效的final(即在定义时只能初始化或赋值一次,不能二次赋值)
  • 原因:new出的对象在堆内存中,局部变量跟着方法走,在栈内存中
  • 方法运行结束后,就会立刻出栈,局部变量就会立刻消失,但是new出来的对象还是在堆内存中,直到被垃圾回收
  • 归根于生名周期不同
匿名内部类
匿名内部类定义格式
  • 接口名称 对象名 = new 接口名称() {//覆盖重写所有抽象方法};
  • 匿名内部类使用使用一次
接口作为成员变量类型
接口作为方法参数和返回值
Objects类
equals()方法
  • 基本类型比较俩个值
  • 引用数据类型比较地址值
  • null不能调用方法,可用Objects.equals(a, b)避免
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值