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

    你可能感兴趣的文章
    npm和yarn的使用对比
    查看>>
    npm报错unable to access ‘https://github.com/sohee-lee7/Squire.git/‘
    查看>>
    npm的问题:config global `--global`, `--local` are deprecated. Use `--location=global` instead 的解决办法
    查看>>
    NR,NF,FNR
    查看>>
    nrf开发笔记一开发软件
    查看>>
    NSDateFormatter的替代方法
    查看>>
    NSOperation基本操作
    查看>>
    NSSet集合 无序的 不能重复的
    查看>>
    NT AUTHORITY\NETWORK SERVICE 权限问题
    查看>>
    ntko文件存取错误_苹果推送 macOS 10.15.4:iCloud 云盘文件夹共享终于来了
    查看>>
    nullnullHuge Pages
    查看>>
    numpy 用法
    查看>>
    Numpy如何使用np.umprod重写range函数中i的python
    查看>>
    oauth2-shiro 添加 redis 实现版本
    查看>>
    OAuth2.0_JWT令牌-生成令牌和校验令牌_Spring Security OAuth2.0认证授权---springcloud工作笔记148
    查看>>
    OAuth2.0_JWT令牌介绍_Spring Security OAuth2.0认证授权---springcloud工作笔记147
    查看>>
    OAuth2.0_介绍_Spring Security OAuth2.0认证授权---springcloud工作笔记137
    查看>>
    OAuth2.0_完善环境配置_把资源微服务客户端信息_授权码存入到数据库_Spring Security OAuth2.0认证授权---springcloud工作笔记149
    查看>>
    OAuth2.0_授权服务配置_Spring Security OAuth2.0认证授权---springcloud工作笔记140
    查看>>
    OAuth2.0_授权服务配置_令牌服务和令牌端点配置_Spring Security OAuth2.0认证授权---springcloud工作笔记143
    查看>>