博客
关于我
2020-09-26
阅读量:782 次
发布时间:2019-03-24

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

多态性、向下转型、instanceof关键字及相关概念的理解

多态性的理解

多态性是Java中的一个核心概念,主要体现在以下几个方面:

  • 方法多态性

    • 对于一个变量所指的对象和其方法的执行,其实可能是多个类中的一个子类实现的。
    • 编译时无法知道具体的方法,但在运行时根据实际的对象类型来执行相应的方法实现。
  • 属性单态性

    • 属性多态性并不适用,原因在于父类变量只能引用父类属性而不能随子类改变。
  • 向下转型(Downcasting):

    • 使用强制类型转换符(_casting operator)进行向下转型。
    • 先使用instanceof关键字进行类型检查,避免ClassCastException。
  • instanceof关键字的作用

    • sheep instanceof Animal:判断sheep是否为Animal类或其子类。
    • instanceof用于先验判断,再决定是否进行向下转型。

    鸪子与动物类的关系

    • 如果Animal是基类,Dog是子类:
      • Dog dog = new Dog();
      • Animal animal = dog; // 向上引用
      • Animal animal2 = new Dog(); // 向上引用

    如何重写equals方法

    public class User {
    private String name;
    private int age;
    @Override
    public boolean equals(Object obj) {
    if (obj == this) {
    return true;
    }
    if (obj instanceof User) {
    User user = (User) obj;
    return Objects.equals(name, user.name) &&
    Objects.equals(age, user.age);
    }
    return false;
    }
    // 重写hashCode方法
    @Override
    public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + ((name == null) ? 0 : name.hashCode());
    result = prime * result + age;
    return result;
    }
    }
    • 重写的逻辑:比较两个对象是否同一类型,并比较属性是否相等。
    • ** hashCode**:用于集合中高效定位,需与equals兼容。

    JDBC数据库操作

    使用JDBC进行数据库操作步骤:

  • 注册驱动

    • 使用DriverManager.registerDriver(new com.mysql.jdbc.Driver());或使用try-with-resources处理连接。
  • 获取连接

    • Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "username", "password");
  • 执行SQL语句

    Statement statement = conn.createStatement();
    ResultSet resultSet = statement.executeQuery("SELECT * FROM users");
  • 处理数据

    • 使用循环读取数据。
    • 关闭ResultSet和关闭Connection。
  • CRUD操作

    • 插入:PreparedStatementdbe.mybatis.update(new Statement(), "INSERT INTO users (name, age) VALUES (?, ?)");
    • 查询、更新、删除:类似插入执行。
  • 关闭资源

    • 使用try-with-resources或手动关闭避免资源泄漏。
  • 抽象类与接口的多态性

    • 抽象类

      • 提供抽象方法,要求子类实现。
      • 不能实例化,需要有子类实现。
    • 接口

      • 提供方法签名,子类必须实现。
      • 接口本身不能实例化,通过实现类来使用。
    • 多态性体现

      • 不同子类实现共同接口或方法,适用于多态性的需求。

    多态性编译与运行行为

    • 编译时:识别变量所属的类,连接到方法表。
    • 运行时:根据实际对象类型执行方法,表现多态性。
    • 多态性是运行时行为。

    Object类说明

    • 表示根父类:所有Java类的基底。
    • 无构造参数:无构造方法,无法初始化。
    • 默认构造器:调用Object的构造器。
    • 方法:HashMap、HashMap类等在Object定义的方法(如hashCode、equals)被重写。

    Object类中的equals方法

    • 默认实现:public boolean equals(Object obj) { return (this == obj); }
    • 目的:比较两个对象的内存地址是否相同。
    • 子类如String重写后,比较对象内容。

    手动重写示例

    public class User {
    private final String name;
    private final int age;
    public User(String name, int age) {
    this.name = name;
    this.age = age;
    }
    @Override
    public boolean equals(Object obj) {
    if (obj == this)
    return true;
    if (!(obj instanceof User))
    return false;
    User other = (User) obj;
    return name == other.name && age == other.age;
    }
    }
    • name和age:使用final修饰,确保属性不可变。
    • equals逻辑:首先检查类型,再比较属性。
    • 重写后,可以放在集合中使用,避免重复元素。

    转载地址:http://otxkk.baihongyu.com/

    你可能感兴趣的文章
    nfs复习
    查看>>
    NFS安装配置
    查看>>
    NFS的安装以及windows/linux挂载linux网络文件系统NFS
    查看>>
    NFS的常用挂载参数
    查看>>
    NFS网络文件系统
    查看>>
    nft文件传输_利用remoting实现文件传输-.NET教程,远程及网络应用
    查看>>
    NFV商用可行新华三vBRAS方案实践验证
    查看>>
    ng build --aot --prod生成文件报错
    查看>>
    ng 指令的自定义、使用
    查看>>
    nghttp3使用指南
    查看>>
    Nginx
    查看>>
    nginx + etcd 动态负载均衡实践(三)—— 基于nginx-upsync-module实现
    查看>>
    nginx + etcd 动态负载均衡实践(二)—— 组件安装
    查看>>
    nginx + etcd 动态负载均衡实践(四)—— 基于confd实现
    查看>>
    Nginx + Spring Boot 实现负载均衡
    查看>>
    Nginx + uWSGI + Flask + Vhost
    查看>>
    Nginx - Header详解
    查看>>
    Nginx - 反向代理、负载均衡、动静分离、底层原理(案例实战分析)
    查看>>
    nginx 1.24.0 安装nginx最新稳定版
    查看>>
    nginx 301 永久重定向
    查看>>