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

    你可能感兴趣的文章
    python | filelock,一个超酷的 Python 库!
    查看>>
    python | fire,一个强大的 Python 库!
    查看>>
    python | flanker,一个神奇的 Python 库!
    查看>>
    python | flower,一个强大的 Python 库!
    查看>>
    python | funcy,一个超强的 提供函数式编程工具 Python 库!
    查看>>
    python | ggplot,一个超强的 Python 库!
    查看>>
    python | grab,一个强大的 Python 库!
    查看>>
    python | gunicorn,一个非常实用的 Python 库!
    查看>>
    python | h5py,一个无敌的关于 HDF5 的 Python 库!
    查看>>
    python | huey,一个非常厉害的 任务调度 Python 库!
    查看>>
    python | hypothesis,一个有趣的 Python 库!
    查看>>
    python | Indico,一个超酷的 Python 库!
    查看>>
    python | isort,一个有趣的 自动整理导入语句 的Python 库!
    查看>>
    python | jinja,一个超酷的 Python 库!
    查看>>
    python | joblib,一个强大的 Python 库!
    查看>>
    python调用git bash_Python学习第70课-用Git Bash在命令行打开sublime
    查看>>
    python | jsonschema,一个实用的 验证 JSON 数据结构 Python 库!
    查看>>
    python课程的中期报告范文_课题研究中期总结报告范文
    查看>>
    python | lxml,一个超酷的 关于XML/HTML 文档 Python 库!
    查看>>
    python | mplfinance,一个有趣的金融数据可视化 Python 库!
    查看>>