継承の一例

1820 ワード

abstract class Person{
    private String name;  
  
    public Person(String n){
        name=n;
    }
    
    public String getName() {
        return name;
    }

    public abstract String getInformation();
}

class Employee extends Person{
    private double salary;

    public Employee(String n,double s) {
        super(n);
        salary=s;
    }

    public double getSalary() {
        return salary;
    }

    @Override
    public String getInformation() {
        return " : 、 :"+getSalary();
    }

}

public class MainTest{
public static void main(String[] args){
   Person p=new Employee(); 
}
}

抽象クラスがインスタンス化できないのはPerson p=new Person()である.これは間違いです.しかしPerson p=new Employee();はい、子クラスのインスタンスを作成します.親クラスの参照はそれを指します.
上記のメインプログラムでは、new Employee以降、オブジェクトが初期化されます.初期化順序は次のとおりです.
親静的ブロック初期化---->子クラス静的ブロック初期化------>親クラス非静的ブロック初期化------>親クラス構築方法---->子クラス非静的ブロック初期化------>子クラス構築方法.(先静後動、先父後子)
このメインプログラムはpersonクラスの非静的属性と構造関数を初期化してからemployeesクラスの非静的属性と構造関数を初期化します
これがあなたの最初の問題です.子クラスの親が抽象クラスである場合、構造方法はどのように遡りますか.抽象クラスは親クラスとしてインスタンスを作成しますか?インスタンスが作成されていないのは、抽象クラスPersonの属性を初期化する構造関数だけであり、1つのクラスの宣言に対して、値を付与し、2つのことを使用し、前者はインスタンス化する必要はなく、後者はインスタンス化する必要がある.
抽象クラスの構造方法はどうなっていますか?属性を初期化する役割です
なぜ構造方法があるのにインスタンス化できないのですか?このような言い方はなく,クラスインスタンス化オブジェクトに対してのみ用いられる.
抽象クラスをインスタンス化することはできません.コンストラクション関数は再ロードできます.上書きすることはできません.コンストラクション関数は継承できません.
コンストラクション関数はクラス名と同じなので、継承してもコンストラクション関数ではありません.また、コンストラクション関数はクラスを初期化する特殊な方法で、このクラスを代表しています.1つのベースクラスはサブクラスが何を拡張するかを知ることはできません.継承したらコードを書かなくてもいいです.では、サブクラスの新しい属性はどのように初期化しますか.もちろんこの2点は私個人の見方です.