Java継承


継承とは?


オブジェクト向けにプログラミングされたJavaは、子から親(親)クラスのメンバーを継承することを意味します.
つまり、子(子)は、継承ジェネレータではなく親(親)の変数とメソッドを選択してインポートされます.

public class Name {
	int a;
    void run() {}

}


public class Student extends Name {

	String name;
    void method(){}

}
上のコードに示すように、extendsキーを使用してNameクラスを継承します.
受け継ぐとどんなメリットがありますか?
まず,継承は親クラスのフィールドやメソッドを直接インポートできるため,新しいコードを書く必要がなく,メンテナンスも容易である.
では、すべての親を継承できますか?
public class Date extends Student, Timetable {

}
まず,Javaでは多重継承は許されないため,上のコードのようにStudentとTimeTableの2つの複数クラスを継承することはできない.
継承できる親は1つだけでなければなりません.継承可能な親には制限があります.
privateに設定されたフィールドとメソッドを継承できません.defaultフィールドとメソッドを他のパッケージから継承できません.
public class Tab {
	
	String model;
	String name;
	
	
	void runOn() {
		System.out.println("start");
	}
	
	void voiceOn() {
		System.out.println("start voice");
	}
	
	void sendMessage() {
		System.out.println("start message");
	}

}
親Tabを作成し、子SmartTabから継承
public class SmartTab extends Tab {
	
	int year;
	
	//생성자 추가
	SmartTab(String model, String name, int year) {
		this.model = model;
		this.name = name;
		this.year = year;
		
	}
	
	void turnOnSmartTab() {
		System.out.println("start smart tab");
	}
	
	void turnOffSmartTab() {
		System.out.println("off smart tab");
	}
}
SmartTabクラスはextendsキーワードであり、親Tabのフィールドとメソッドを継承します.
継承とは異なり、void turnOnSmartTab()メソッドとvoid tunOffSmartTab()メソッドも追加されています.
public class TabExample {

	public static void main(String[] args) {

		SmartTab myTab = new SmartTab("sam", "sam-tap", 2010);
		
		System.out.println(myTab.model);
		myTab.voiceOn();
		myTab.sendMessage();
	}

}
SmartTabオブジェクトを作成することで、Tabのフィールドとメソッドを直接呼び出すことができます.
ここで、参照変数であるmyTabは、サブオブジェクトSmartTabを参照する

親ジェネレータ呼び出しsuper

public class People {
	
	public String name;
	public String job;
	
	public People(String name, String job) {
		this.name = name;
		this.job = job;
	}
}
上のpeopleクラスには、基本コンストラクション関数ではなく、パラメータを受け入れるコンストラクション関数があります.
public class Child extends People {
	
	
}
Childという名前のサブクラスを作成し、Peopleクラスを継承すると、このクリップには次のエラーメッセージが表示されます.
Implicit super constructor People() is undefined for default constructor. Must define an explicit constructor
このエラーメッセージは、親にデフォルトのジェネレータがないことを意味します.
public class Child extends People {
	
	public Child() {
	   super("sally", "doctor");
	}
}
上のコードのように、親ジェネレータのパラメータを確認し、superジェネレータを個別に作成して呼び出す必要があります.
public class Child extends People {
	
	public int age;
	
	public Child(String name, String job, int age) {
		super("name", "job");
		this.age = age;
	}
}
スーパージェネレータは最初の行にあるはずです
public class ChildExample {

	public static void main(String[] args) {
		
		Child c = new Child("Sally", "doctor", 10);
		System.out.println(c.name);
		System.out.println(c.job);
		System.out.println(c.age);

	}

}
実行後、親クラスの作成者が最初に実行するかどうかを決定できます.