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

本文共 2710 字,大约阅读时间需要 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/

    你可能感兴趣的文章
    Mac book pro打开docker出现The data couldn’t be read because it is missing
    查看>>
    MAC M1大数据0-1成神篇-25 hadoop高可用搭建
    查看>>
    mac mysql 进程_Mac平台下启动MySQL到完全终止MySQL----终端八步走
    查看>>
    Mac OS 12.0.1 如何安装柯美287打印机驱动,刷卡打印
    查看>>
    MangoDB4.0版本的安装与配置
    查看>>
    Manjaro 24.1 “Xahea” 发布!具有 KDE Plasma 6.1.5、GNOME 46 和最新的内核增强功能
    查看>>
    mapping文件目录生成修改
    查看>>
    MapReduce程序依赖的jar包
    查看>>
    mariadb multi-source replication(mariadb多主复制)
    查看>>
    MariaDB的简单使用
    查看>>
    MaterialForm对tab页进行隐藏
    查看>>
    Member var and Static var.
    查看>>
    memcached高速缓存学习笔记001---memcached介绍和安装以及基本使用
    查看>>
    memcached高速缓存学习笔记003---利用JAVA程序操作memcached crud操作
    查看>>
    Memcached:Node.js 高性能缓存解决方案
    查看>>
    memcache、redis原理对比
    查看>>
    memset初始化高维数组为-1/0
    查看>>
    Metasploit CGI网关接口渗透测试实战
    查看>>
    Metasploit Web服务器渗透测试实战
    查看>>
    MFC模态对话框和非模态对话框
    查看>>