Java継承
3284 ワード
継承とは?
オブジェクト向けにプログラミングされた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);
}
}
実行後、親クラスの作成者が最初に実行するかどうかを決定できます.Reference
この問題について(Java継承), 我々は、より多くの情報をここで見つけました https://velog.io/@jooog/Java-상속Inheritanceテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol