Java面向对象高级

一、final关键字:

  • 修饰类:被修饰的类为最终类,不能被其他类继承,如工具类可用final修饰。
  • 修饰方法:被修饰的方法为最终方法,不能被子类重写,后续会说明哪些方法用final修饰。
  • 修饰变量:变量有且仅能被赋值一次。成员变量分为静态和实例变量,静态变量用final修饰后成为常量,一般用于系统配置信息,常量名建议全大写,多单词用下划线连接;实例变量用final修饰一般无意义。基本类型变量用final修饰后数据不能改变,引用类型变量地址不能变但指向对象内容可改变。

二、常量:

  • 定义与作用:使用static final修饰的成员变量是常量,可记录固定值,用于项目中系统配置信息展示,可提高可读性和可维护性。
  • 性能优势:程序编译后,常量会被宏替换成真实字面量,使用常量和使用字面量性能相同。

三、单例类:

  • 设计模式概念:是解决问题的最优方案,学习设计模式要掌握解决的问题及写法。
  • 单例类作用:确保某个类只能创建一个对象,如任务管理器可设计成单例类。
  • 饿汉式单例:对象提前创建,特点是加载类时对象已存在。实现步骤为私有化构造器、定义静态变量记录唯一对象、提供静态方法返回该对象。
  • 懒汉式单例:用对象时才创建对象。实现步骤为私有化构造器、定义静态变量初始为null、提供静态方法判断,首次使用创建对象并返回,后续直接返回已创建对象。两种单例各有使用场景。

四、枚举类:

  • 定义与特点:是特殊类,用public和enum关键字声明,第一行罗列枚举对象名称,本质是常量,记住枚举类的对象。枚举类是最终类,继承Enum类,构造器私有,是多例模式。编译器为其新增values方法获取所有枚举对象数组,可按名字定位对象。
  • 应用场景:适合做信息的分类和标志,如数字迷阵游戏中用枚举定义方向,也可用于控制图片上下左右滑动的信息标志。与常量相比,枚举做信息分类和标志时,方法只能接收规定好的枚举对象,输入受约束,对成员提醒友好。

五、抽象类:

  • 定义与特点:用abstract关键字修饰类为抽象类,修饰方法为抽象方法,抽象方法无方法体。抽象类中不一定有抽象方法,但有抽象方法的类一定是抽象类。抽象类不能创建对象,作为父类被继承,子类继承抽象类需重写全部抽象方法,否则子类也需定义为抽象类。
  • 应用场景与好处:当父类知道每个子类要做某事但情况不同时,将行为定义为抽象方法,交给子类重写,可简化代码,更好支持多态。还可用于设计模板方法设计模式,将相同功能步骤抽取到父类模板方法中,不同部分用抽象方法交给子类实现,提高代码复用性和通用性。模板方法建议用final修饰,防止子类重写。

六、接口:

  • 定义与特点:用INTERFACE关键字定义,JDK 8之前接口中只能定义常量和抽象方法,常量可省略public static final,抽象方法可省略public abstract。接口不能创建对象,被类用implement关键字实现,一个类可实现多个接口。实现类需重写接口的全部抽象方法,否则定义为抽象类。
  • 好处与应用:弥补类单继承的不足,使类拥有更多角色和功能;可实现面向接口编程,利于解耦合,方便业务切换。

七、班级学生信息管理模块案例:

可定义接口规定打印学生信息和平均分的功能,让不同公司实现,支持业务灵活切换。

  • 接口实现与解耦
    • 实现类编写:为接口提供实现类,命名规范通常在接口名后加impl,需重写接口方法。
    • 数据传递:使用有参构造器将学生对象数组传递给实现类,实现功能串联。
    • 解耦优势:面向接口编程,通过切换实现类对象可轻松切换业务逻辑,实现解耦。

八、JDK8接口新增方法:

  • 默认方法:即普通实例方法,需用default修饰,默认public,通过接口实现类对象调用。
  • 私有方法:JDK9开始支持,为私有的实例方法,只能在接口中由其他实例方法调用。
  • 静态方法:默认用public修饰,只能使用当前接口名调用。
  • 新增目的:增强接口能力,便于项目扩展和维护,避免新增功能导致大量实现类重写代码。

九、接口注意事项:

  • 接口多继承:接口与接口可多继承,便于类实现多个接口时简化代码。
  • 方法签名冲突:多个接口中方法签名冲突时,不支持多继承和多实现;若方法完全相同,则支持合并。
  • 父类与接口同名方法:类继承父类又实现接口,父类和接口中有同名默认方法时,优先使用父类方法;若要调用接口方法,需使用特定中转语法。
  • 多接口默认方法冲突:一个类实现多个接口,多个接口中有相同默认方法时,类重写该方法可避免冲突;若要调用特定接口方法,需使用接口名.super.方法名中转。

十、抽象类与接口区别:

  • 相同点:都是抽象形式,都有抽象方法,不能创建对象,都派生子类,支持多态和解耦,子类或实现类需重写全部抽象方法。
  • 不同点:抽象类可定义类的全部普通成员,只能被类单继承;接口主要定义常量和抽象方法(JDK8新增三种方法),可被类多实现。抽象类体现模板思想,利于代码复用;接口适合功能解耦。

十一、智能家居控制系统案例:

  • 角色分析:确定吊灯、电视、洗衣机、落地窗等家用设备角色,将控制系统设计成单例对象。
  • 设备类定义:定义家电父类,包含设备名字和状态(用布尔值表示);为各设备子类(如吊灯、电视等)继承家电类并提供构造器。
  • 设备对象存储:使用多态,将各类设备对象存储在家电类型的数组中。
  • 开关功能设计:定义开关接口(如switch),家电类实现该接口并重写开关方法,实现设备开关功能。
  • 智能控制系统:创建智能控制系统对象,接收家电对象数组,调用设备开关方法控制设备状态。
  • 界面设计:设计控制台界面,展示设备当前状态,提示用户选择要控制的设备,通过扫描器接收用户输入,使用switch语句判断并控制相应设备,用死循环让用户可多次操作,输入exit可退出。
  • 单例设计:将智能控制系统设计成单例类,通过私有构造器、静态变量和公共静态方法确保只有一个对象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值