エントリから放棄までの退屈なJavaEE(8)IDEAで一般的に使用されるショートカットキーとequals()メソッドとスーパーキーワード

目次

1.IDEAショートカットキーと関連操作

2. equals()関数を書き直します

3.スーパーキーワード_継承ツリートレース


コンストラクターを除くすべてのプロパティとメソッドが継承されます。ただし、すべてを直接使用できるわけではありません。

オブジェクトを印刷するときに、toString()メソッドが呼び出されない場合、toString()メソッドが自動的に呼び出されます。戻り値:クラス名@オブジェクトアドレス


1.IDEAショートカットキーと関連操作

1.クラスの構造ビュー:alt + 7
2.クラスのソースコードを確認します:ctr | +左ボタン
3.クラスの関係を表示します:クラス名をマウスで右クリック->図- ->図を表示

4.コンストラクター、get、setメソッド、equalsなどを自動的に生成します。alt+ insert

5.マウスを置いた後、プロンプトドキュメントの説明プロンプトを設定します:[ファイル]-> [設定]-> [エディター]-> [一般]->

2. 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

3.スーパーキーワード_継承ツリートレース

スーパー「と見なすことができる」は、直接の親オブジェクトへの参照です。superを使用して、サブクラスによってオーバーライドされる親クラスのメソッドまたは属性にアクセスできます。
superを使用して通常のメソッドを呼び出します。ステートメントの位置に制限はなく、サブクラスで気軽に呼び出すことができます。
これ
が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