博客
关于我
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/

    你可能感兴趣的文章
    MSCRM调用外部JS文件
    查看>>
    MSEdgeDriver (Chromium) 不适用于版本 >= 79.0.313 (Canary)
    查看>>
    MsEdgeTTS开源项目使用教程
    查看>>
    msf
    查看>>
    MSP430F149学习之路——SPI
    查看>>
    msp430入门编程45
    查看>>
    MSSQL数据库查询优化(一)
    查看>>
    MSSQL数据库迁移到Oracle(二)
    查看>>
    MSSQL日期格式转换函数(使用CONVERT)
    查看>>
    MSTP多生成树协议(第二课)
    查看>>
    MSTP是什么?有哪些专有名词?
    查看>>
    Mstsc 远程桌面链接 And 网络映射
    查看>>
    Myeclipse常用快捷键
    查看>>
    MyEclipse更改项目名web发布名字不改问题
    查看>>
    MyEclipse用(JDBC)连接SQL出现的问题~
    查看>>
    mt-datetime-picker type="date" 时间格式 bug
    查看>>
    myeclipse的新建severlet不见解决方法
    查看>>
    MyEclipse设置当前行背景颜色、选中单词前景色、背景色
    查看>>
    Mtab书签导航程序 LinkStore/getIcon SQL注入漏洞复现
    查看>>
    myeclipse配置springmvc教程
    查看>>