内容概括:1. 原始类Object的toString方法 2. 类中的super基本内容

Java 中的一些知识点

  • Java 中的知识点
  • 与C++相关
  • toString方法
  • super

与C++相关【了解的不是很多】

  • 在Java程序中:一个方法以 ; 结尾,并且修饰符列表中有 native 关键字
  • 代表:底层调用C++写的dll程序【dll动态连接库文件】

toString方法

  • 来源:
    toString方法源自 java.lang.Object 中的方法
  • 因为所有的类默认继承Object所有,几乎所有类都有toString方法
  • toString方法实现
// 以下是官方原文
    public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
        // 返回:类名字@哈希加密的内存地址
    }
  • toString方法的作用是什么?
    作用:将“java对象”转换“字符串形式”
  • toString方法的特性
System.out.println(引用.toString());
    等价
    System.out.println(引用);
  • toString方法的价值:一般用于重写后用在开发时,数据的打印查看
    示例:
public class ToStringTest {

    public static void main(String[] args) {

        MyDate date1 = new MyDate();
        MyDate date2 = new MyDate(2022, 1, 18);

        // toString()方法已经重新
        System.out.println(date1.toString());
        System.out.println(date1);

        System.out.println(date2.toString());
        System.out.println(date2);
    }

}


class MyDate {

    private int year;
    private int month;
    private int day;

    public MyDate() {
        this(1970,1,1);
    }

    public MyDate(int year, int month, int day) {

        this.year = year;
        this.month = month;
        this.day = day;
    }

    public String toString() {
        return this.year + "年" + this.month + "月" + this.day + "日";
    }

}

super

  • super 是一个关键字
  • super和this对比学习
    this:
  • this能够出现在实例方法和构造方法中
  • this的语法是: this.this()
  • this不能使用在静态方法中
  • this. 大部分情况都可以省略
  • this. 什么时候不可以省略?
public void setName(string name){
    this.name = name;
}
  • this() 只能出现在构造方法第一行,通过当前的构造方法去调用“本类”中的其他构造方法

super:

  • super能够出现在实例方法和构造方法中
  • super的语法是: this.this()
  • super不能使用在静态方法中
  • super. 大部分情况都可以省略
  • super. 什么时候不可以省略?
    如果父类和子类中有重名属性,你需要访问父类则必须使用 super.
  • super() 只能出现在构造方法第一行,通过当前的构造方法去调用“父类”中的其他构造方法;目的:构建子类对象的时候,先初始化父类特征
  • super()
    表示通过子类的构造方法调用父类的构造方法
  • 重要结论:
    当一个构造方第一行,没有this()或super()的话,会默认存在一个super()【无参】
    一个类如果手动提供一个构造方法,那么无参数构造系统将不再提供
  • 注意:this()与super()不共存
  • super(实参列表)初始化当前对象的父类型特性

总结

this: 本类

super: 当前类的父类

可以使用super访问或调用在当前类中被覆盖的方法和属性【注意静态问题,super是相对与this】

可以粗浅的理解:super相当于当前类的父类的this【并不准确,下面测试】

// 测试
public class Test{

    public static void main(String[] args){

        Test test_1 = new Test();

        test_1.doSome();
    }

    // 实例方法
    public void doSome(){

        // Test@2f89e2d1
        System.out.println(this);
        // println输出 "引用" 默认调用toString()方法

        System.out.println(super);   // 报错
    }
}

通过这个测试得出的结论:

  • super 不是引用,不保存内存地址,也不指向任何对象
  • super 只是代表当前对象内部的那一块父类型的特征