Java 继承(二)

继承的使用

一、父类和子类间的转换

和基本类型的转换相同,子类(类似低精度)可以自动转换为父类(类似高精度)类型

import java.util.Date;
public class ObjectTest {
    public static void main(String[] args) {
        // 例如 String 和 Date两个类的父类都是Obeject类
        String str = "hello";
        Date date = new Date();
        // 与数据类型转换类似,因为Object是父类(高精度),上述两类可以转换为Object类
        Object o = str;
        // str类是子类(低精度)所以object类不能够自动转换成String类
        str = o;// 会报错
        // 但是同样可以强制转换变成String类
        str = (String) o;
    }
}

关键字instanceof判断对象的类型以及是否是某个对象的子类

import java.util.Date;
public class ObjectTest {
    public static void main(String[] args) {
        String str = "hello";
        Date date = new Date();
        Object o = str;
        // instanceof 关键字可以判断变量的类型
        if (o instanceof String) {
            System.out.println((String)o);
        }
        o = date;
        // date类的范围是要比String类小的,所以此处强转会报错
        // 加入判断后结果为否不会执行
        if (o instanceof String) {
            str = (String) o;
            System.out.println((String)o);
        }
        // 判断str是否是String类的对象
        System.out.println(str instanceof String);
        // 判断str是否是Object的子类对象
        System.out.println(str instanceof Object);
    }
}

二、相关方法的使用

一切对象的继承都来自于Object类,继承的使用主要就是Object类中方法的使用
这些方法保证所有的对象都具备某些公共功能,方便垃圾区处理回收

toString():返回一个字符串,该字符串由类名(对象是该类的一个实例)、标记符“@ ”和对象的哈希码的无符号的十六进制组成。
等价于 getClass().getName() + ‘@’ + Integer.toHexString(hashCode())

package JavaSE;
class Test{
        }
public class ObjectTest {
    // toString方法:返回一个字符串
    // getClass().getName() + '@' + Integer.toHexString(hashCode())对象的字符串表示
    public static void main(String[] args) {
        Test test = new Test();
        System.out.println(test.toString());
System.out.println(test);// 直接打印对象默认会调用toString方法
    }
}

打印结果为:

JavaSE.Test@6e8dacdf

表示为该对象在JavaSE包下的Test类中
在实际的使用中常将其重写,返回当前类以及所包含的属性

@Override
// 这个叫做注解,理解为写给jvm看的注释就行,这一个注解表示下面的方法是重写的
public String toString() {
    return "ObjectTest{}";//返回当前的类表示这个方法在ObjectTest中,如果有属性也会一并写入
}

Intellij中Alt + insert可以选择toString()来快速的生成重写,如果该类有相关属性,也会被自动重写进入返回
在这里插入图片描述

equals()
public class ObjectTest {
    // equals方法的使用
    public static void main(String[] args) {
        Stu stu1 = new Stu();
        Stu stu2 = new Stu();
        stu1.setName("某某");
        stu1.setDegree("本科");
        stu2.setName("某某");
        stu2.setDegree("本科");
        // 等号比较地址equals默认也会比较地址
        System.out.println(stu1 == stu2); // 结果为false
        System.out.println(stu1.equals(stu2));// 结果为false
    }
}
class Stu{
    private String name;
    private String degree;
    public void setName(String name) {
        this.name = name;
    }
    public void setDegree(String degree) {
        this.degree = degree;
    }
}

基本上还是会对equals进行重写,仍然可以通过快捷键产生

@Override
public boolean equals(Object o) {
    // 这里this就是指stu1对象,首先比较地址
    if (this == o) return true;
    // 下面判断它是否为空以及是否是同一个类,第一个getClass()是省略掉了this
    // 为空以及不是同一个类没有可比性
    if (o == null || getClass() != o.getClass()) return false;
    // 这里将传进来的类强制转换为当前类
    Stu stu = (Stu) o;
    // 当内容都相等则返回为ture,反之为false
    return Objects.equals(name, stu.name);
}

不同的IDEA会有差异,但是流程相同,比较地址是否相同 – 判断是否为空以及是否为同类 – 强制转换类 – 比较内容(对象的属性)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值