継承の一例
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点は私個人の見方です.