百无聊赖之JavaEE从入门到放弃(八)IDEA常用快捷键 & equals()方法 & super关键字

目录

一.IDEA快捷键和相关操作

二.重写equals()函数

三.super关键字_继承树追溯


除了构造方法之外的所有的属性和方法都被继承。但是,不是所有的都能直接使用。

当打印一个对象时,如果没调用toString()方法,则会自动调用toString()方法。返回:类名@对象地址


一.IDEA快捷键和相关操作

1.类的结构视图: alt+7
2.看类的源码: ctr|+左键
3.查看类的关系:鼠标放到类名上,右键--> Diagram-->show Diagram

4.自动生成构造器,get, set方法,equals等: alt+ insert

5.设置鼠标悬停后快速文档说明提示:File-->Settings-->Editor-->General-->

二.重写equals()函数

equals()函数源码:

public boolean equals(Object obj) {
        return (this == obj);
}

如下代码,没重写equals()前输出为:

false
false
true
true

代码:

import java.util.Objects;

public class Equals {
    int id;
    int age;
    String name;

    //选取时按Ctrl选多个
    public Equals(int id, int age, String name) {
        this.id = id;
        this.age = age;
        this.name = name;
    }

    public static void main(String[] args) {
        Equals e1=new Equals(1,22,"小明");
        Equals e2=new Equals(1,22,"小明");
        //比较对象地址
        System.out.println(e1==e2);
        System.out.println(e1.equals(e2));//通过equals()方法源码可看到equals也是用==比较,即比较对象是否是一个
        System.out.println("123".equals("123"));
        System.out.println("123"=="123");

    }
    //重写equals()函数,右键Generate自动生成,根据id判断是否相等
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        //空对象或者类型不一致
        if (o == null || getClass() != o.getClass()) return false;
        Equals equals = (Equals) o;
        return id == equals.id;
    }

    @Override
    public int hashCode() {
        return Objects.hash(id);
    }
}


重写equals()后输出为:

false
true
true
true

三.super关键字_继承树追溯

super“可以看做”是直接父类对象的引用。可以通过super来访问父类中被子类覆盖的方法或属性。
使用super调用普通方法,语句没有位置限制,可以在子类中随便调用。
this
若是构造方法的第一行代码没有显式的调用supe(..)或者this(..);那么 Java默认都会调用super)含义是调用父类的无参数构造方法。这里的super()可以省略。

代码1:

public class TestSuper01 {
    public static void main(String[] args) {
        new ChildClass().f();
    }
}

class FatherClass{
    public int value;
    public void f(){
        value=100;
        System.out.println("FatherClass.value="+value);
    }
}

class ChildClass extends FatherClass{
    public int value;//覆盖一个变量

    public void f(){ //覆盖父类的函数
        super.f();//调用父类的普通方法
        value=200;
        System.out.println("ChildClass.value="+value);
        System.out.println(value);
        System.out.println(super.value);//调用父类的成员变量
    }
}

输出:

FatherClass.value=100
ChildClass.value=200
200
100

代码2:

public class TestSuper02 {
    public static void main(String[] args) {
        System.out.println("开始创建一个ChildClass对象......");
        new ChildClass2();
    }
}
class FatherClass2{
    public FatherClass2(){
        //这里会先去调用父类即Object类的构造函数,相当于省略了super();
        System.out.println("创建FatherClass2对象");
    }

}

class ChildClass2 extends FatherClass2{
    public ChildClass2(){
        //这里会先去调用父类即FatherClass2的构造函数,相当于省略了super();
        System.out.println("创建ChildClass2对象");
    }

}

输出:

开始创建一个ChildClass对象......
创建FatherClass2对象
创建ChildClass2对象

猜你喜欢

转载自blog.csdn.net/weixin_44593822/article/details/115348351
今日推荐