Java基础编程
发布日期:2021-05-18 05:20:15 浏览次数:12 分类:精选文章

本文共 1908 字,大约阅读时间需要 6 分钟。

多态是面向对象编程中的一个核心概念,它允许同一个类的不同对象在运行时绑定不同的方法或属性,从而表现出不同的行为。这是通过继承和多态来实现的,使得系统更加灵活和可扩展。

开发中多态的常见场景

多态在开发中广泛应用于以下情况:

  • 反射和动态代理:通过反射机制在运行时修改类的行为,或者使用动态代理实现增强功能。
  • 日志记录和调试:使用动态代理来跟踪和记录对象的行为,常用于日志记录工具。
  • 组件化框架:如依赖注入框架(例如Spring),允许不同实现通过接口逆向转换(依赖注入)来提供动态行为。
  • 动态布局和功能切换:允许程序根据运行环境或用户需求动态更改功能模块或界面布局。
  • 编译、运行时错误示例

    在实际开发中,如果不正确使用多态,可能会导致以下问题:

  • 编译时错误:如不慎在强制类型转换中使用错误的类型,编译器会抛出错误,如Attempted division by zero
  • 运行时错误:使用instanceof检查错误类型可能引发ClassCastException,如将子类对象赋给父类引用变量。
  • 信息泄漏:未经保护的 mixins 可能导致隐私数据泄漏。
  • 面试题:面向对象的三大特征

    • 封装(Encapsulation):将数据和方法包装在一起,便于管理和保护。例如,使用私有字段保护内部数据,可控制访问权限。
    • 继承(Inheritance):继承已有的类,重用代码,减少重复。例如,子类继承父类属性和方法,仅重写需修改的部分。
    • 多态(Polymorphism):同一类实例可以表现出不同行为。例如,使用抽象类和接口实现多态,使一个子类对象可以满足多个接口的需求。

    Object类

    Object是Java的根类,提供了一系列通用方法,如Object.toString()Object.equals()。每个类都直接或间接继承自Object

    • equals方法:默认比较对象的引用是否相同。
    • hashCode方法:计算对象的哈希值。
    • toString方法:默认输出对象的类名、 系统ID 和 hashcode。
    • clone方法:创建对象的浅拷贝版本。
    • finalize方法:垃圾回收前执行,用于释放资源。

    包装类

    包装类(如IntegerString)为基本数据类型的使用提供了类的特性,便于调用方法。box(装箱)和unbox(拆箱)机制允许自动类型转换。

    单元测试方法

    在JUnit框架中,单元测试方法用于测试代码是否正确。方法需满足以下条件:

    • 方法名以test开头。
    • 方法参数无需传递。
    • 返回类型为void
    • 所在类的可见性为public
    • 类提供一个空参的构造器。

    String字符串池

    字符串池(String Pool)用于缓存重复使用的字符串,防止内存浪费。intern()方法将字符串转到字符串池。

    static关键字

    static用于声明静态成员:

    • static变量:只在类范围内存在,多个对象共享数据。
    • static方法:不随对象创建,不依赖对象实例。例如,Math.sqrt()是一个静态方法。

    单例模式

    单例模式确保一个类只有一个实例。在实现中,可采用饿汉式或懒汉式。饿汉式在类加载时创建实例,线程安全;懒汉式在第一个访问时创建,可能线程不安全。

    main方法

    main方法作为程序入口,接收控制台参数。可以通过传递不同参数实例化对象或执行操作,如:

    public class MainDemo {    public static void main(String[] args) {        Main.main(new String[] { "arg1", "arg2" });    }}

    代码块

    代码块用于初始化,分为静态和非静态:

    • 静态代码块:在类加载时执行,常用于初始化静态属性。
    • 非静态代码块:在对象构造时执行,用于初始化属性和实例变量。

    final关键字

    final用于标记不可变或final行为:

    • 属性:常量。
    • 方法:不能被重写。例如,public static final int MAX_VALUE = Integer.MAX_VALUE;

    抽象类与接口

    • 抽象类:定义接口,方法无实现,需子类实现。
    • 接口:定义特定功能的契约,可通过多个实现类实现。例如接口CompareA,子类实现CompareB,显示出多态性。

    内部类

    内部类可以作为外部类的成员或局部对象:

    • 成员内部类:在外部类中定义,可以访问外部类的成员。
    • 局部内部类:在方法或代码块中定义,仅在该上下文可用。

    通过以上知识,开发者能够更好地理解和运用Java面向对象概念,在实际开发中灵活灵活应对各种需求。

    上一篇:day15学习笔记
    下一篇:JavaSE学习day10

    发表评论

    最新留言

    很好
    [***.229.124.182]2025年05月02日 12时27分42秒