Javaオブジェクト指向の継承
1.基本理論について話す
継承とは?
継承とは、あるタイプのオブジェクトに、別のタイプのオブジェクトのすべての非プライベートプロパティとメソッドを持たせることです。
継承には、親クラスと子クラスという2つの概念があります。
サブクラスは親クラスを継承します。これは自然界での普遍的な関係です!親と子供は異なる場合がありますが、動物の世界では肉食動物や草食動物など多くの類似点がなければなりません。これらはすべて動物です。親と子供にとって、子供は親のように見えなければならず、血縁者です関連する法律にも従いますが、これはつながりです!一般的に言えば、親クラスの属性とメソッドはより一般的であり、サブクラスで頻繁に使用されます。サブクラスのメソッドは、多くの場合、より具体的です。つまり、自然界の観点からの突然変異と進化、およびソフトウェア開発の観点からの拡張と強化です。
継承された関連する構文テンプレート:
この文法規則は、C ++よりもはるかに単純です。!!この文法モジュールの観点から見ると、パブリック、プライベート、または保護された継承はなく、ただの継承だけです...それは本当に簡単です!
いくつかの継承された機能:
最初:
子クラスには、親クラスのすべての非プライベートプロパティとメソッドがあります
第二:
Java は多重継承を許可しません。つまり、AがBを継承すると、AはCを継承できなくなります。
第三:
Java は複数レベルの継承を許可します。これは機能です。つまり、AはBを継承し、BはCを継承し、Aは間接的にCを継承します。
これは、コードの結合を改善し、エラーが発生しやすく、拡張が容易でないため、実際には適切ではありません。
第4:
サブクラスは独自の属性とメソッドを持つことができます。つまり、親クラスに基づいて展開します
次に、サブクラスオブジェクトのインスタンス化
プログラム表示:
import java.util.Scanner;
public class Main6 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String name = sc.next();
int age = sc.nextInt();
String school = sc.next();
Student st = new Student(name, age, school);
st.Show();
sc.close();
}
}
class Person {
protected String name;
protected int age;
protected Person(String name, int age) {
this.name = name;
this.age = age;
System.out.println("Person is constructed!");
}
}
class Student extends Person {
private String school;
public Student(String name, int age, String school) {
super(name, age);
this.school = school;
System.out.println("Student is constructed!");
}
public void Show() {
System.out.println("The student's information is:");
System.out.println("Name is:" + this.name + " Age is:" + this.age + " School is:" + this.school);
}
}
結果を示す:
何を学びましたか?
最初:親クラスと子クラスの構築順序
自然界の法則によると、卵の前に鶏がいます!既存の父親(祖先)だけが子供を持っています!
したがって、サブクラスのオブジェクトをインスタンス化するときは、まず祖先をインスタンス化する必要があり、システムはサブクラスをインスタンス化する前に親クラスを認識している必要があります。したがって、上記のプログラムのケースから、親クラスが最初に作成され、サブクラスが後で作成されることがわかります。
2番目:サブクラスのパラメーターなしの構造とパラメーター化された構造
実際、それがパラメーター化された構造であるか、パラメーターなしの構造であるかにかかわらず、super();を呼び出す必要がありますが、このキーワードは主にthis(と同様にパラメーター化された構造の場合に使用されます)。このような使用法では、親クラスの構造を呼び出すことができます。メソッド、サブクラスの実際のパラメーターを親クラスに渡し、親クラスのインスタンス化が完了した後でサブクラスをインスタンス化します。したがって、最も重要なのはこのsuper();です。
三、スーパーキーワードの学習
superキーワードとは何ですか?
上記のプログラムでは、スーパーキーワードを確認しました。これは、サブクラスの構築メソッドの最初の文であることがわかっているため、このスーパーキーワードを使用して親クラスの構築メソッドを参照します。
詳細:
サブクラスオブジェクトを作成するときは、まずサブクラスの構築メソッドで親クラスオブジェクトを作成します。サブクラスをインスタンス化する前に、親クラスがインスタンス化されるまで待つ必要があります。それが理由です。スーパーキーワードは、サブクラスの構築メソッドの最初の文で使用する必要があります。
superの主な機能は、親クラスのコンテンツを呼び出すサブクラスを完了すること、つまり、親クラスのプロパティまたはメソッドを呼び出すことです。
実際には、パラメーターなしのコンストラクターでも、プログラマーがsuperキーワードを記述していなくても、実際にはこのsuper();はまだ存在します。
superキーワードの使用法:「direct」という単語に注意してください!
上記の3つの使用法を試してください。
public class Main6 {
public static void main(String[] args) {
Cat c = new Cat("小花猫", 18, "大草鱼");
c.Work();
c.Show();
}
}
class Animal {
protected String name;
protected int age;
protected Animal(String name, int age) {
this.name = name;
this.age = age;
}
public void Work() {
System.out.println("他们会为了生存去吃东西、交配……");
}
public void Show() {
System.out.println(this.name + "今年已经:" + this.age + "岁了!");
}
}
class Cat extends Animal {
private String Food;
public Cat(String name, int age, String Food) {
super(name, age);
this.Food = Food;
}
public void Work() {
super.Work();
System.out.println(this.name + "比较喜欢吃的东西是" + this.Food);
}
public void Show() {
super.Show();
}
}
結果表示:
何を学びましたか?
括弧がない場合、superキーワードは親クラスオブジェクトへの参照として使用できます。このオブジェクトは、クラスレベルではなく、オブジェクトレベルの仮想匿名オブジェクトです。このスーパー参照オブジェクトを使用して、親クラスのより一般的なプロパティまたはメソッドにアクセスできます。コードの量を大幅に削減し、コードの再利用を実現できます!
superキーワードとこれの主な違いは何ですか?
superキーワードは、このキーワードと非常によく似ています。それらの違いは何ですか?
最初の違い:
superキーワードは実際には親クラスへのサブクラスのオブジェクトの参照であり、thisキーワードは現在のメソッドが作用するオブジェクトの参照です!
2番目の違い:
superキーワードは現在のサブクラスオブジェクトの親クラスの
プロパティとメソッドにアクセスするためのもので、thisキーワードは現在のオブジェクトのプロパティとメソッドにアクセスするためのものです
3番目は違いではなく、類似性です。
thisキーワードとsuperキーワードの両方をメソッドの最初の行に配置する必要があります!