ポリモーフィズムの概要
- ポリモーフィズムは、カプセル化と継承に続くオブジェクト指向の3番目の特性です。
- ポリモーフィズムの実際的な重要性と個人的な理解のために:
- ポリモーフィズム:同じ参照は同じメソッドを呼び出しますが、異なることを行います。
- 実物は多くの場合、学生、学生は人のカテゴリに属し、特定のクラスメートの張山は学生と人の両方のカテゴリに属します。つまり、複数の形式があります。これは本物です。 。多形。
- オブジェクト指向言語として、Javaは複数の形式のものを記述することもできます。StudentクラスがPeopleクラスを継承する場合、StudentのオブジェクトはStudentとPeopleの両方です。
-
ポリモーフィズムは親クラスに反映され、参照変数は子クラスオブジェクトを指すことができます。
注:ポリモーフィックな親クラス参照変数を使用してメソッドを呼び出すと、サブクラスの書き換えられたメソッドが呼び出されます。 -
ポリモーフィズムの定義と使用形式
定义格式:父类类型 变量名=new 子类类型();
-
理解:
多态是同一个行为具有多个不同表现形式或形态的能力。 多态就是同一个接口,使用不同的实例而执行不同操作。
6.ポリモーフィズムのいくつかの利点:
インターフェイス、ポリモーフィズムは、スーパークラスがメソッドシグネチャを介してサブクラスに共通のインターフェイスを提供し、サブクラスがそれを完了またはオーバーライドして実現することです。
置換可能
性、ポリモーフィズムは既存のコードを置き換えることができます。既存のクラスのポリモーフィズム、継承、およびその他の特性の操作と操作に影響を与えない新しいサブクラス;
柔軟性、ポリモーフィズムは非常に柔軟です;
第5に、単純さ、それはまた、アプリケーションソフトウェアコードの作成と変更のプロセスを簡素化します。。
多型メンバーの特徴
class People{
private int num=6;
int vis=666;
public void eat() {
System.out.println("米饭");
}
public void getNum() {
System.out.println(num);
}
}
class Student extends People{
private int num=10;
int vis=66;
public void eat() {
System.out.println("炸鸡");
}
public void study() {
System.out.println("good good study");
}
public void getNum() {
System.out.println(num);
}
}
public static void main(String[] args) {
People p=new Student();
System.out.println(p.vis);//
p.eat();
p.getNum();
//输出
//666
//炸鸡
//10
- 多態的なメンバー変数:
親クラスの変数値のみを取得できます - ポリモーフィックメンバーメソッド:
サブクラスによってオーバーライドされたメソッドを呼び出しますが、親クラスのメソッドである必要があります
上向きの変換
使用形式:親型変数name = new subtype type();
適用シナリオ:サブタイプ型に直面する必要がない場合、拡張性を向上させるか、親クラスの関数を使用することで、対応する操作を完了できます。
**理解:**親クラスのメソッドを使用しますが、サブクラスによってオーバーライドされたメソッドを呼び出します
ダウンキャスト
使用形式:サブクラスタイプ変数name =(サブクラスタイプ)親タイプの変数;
**適用シナリオ:サブクラスの一意の関数を使用する場合。**
**理解:**サブカテゴリを使用して問題を解決する
コードサンプル表示
package ParentAndBase;
class People{
private int num=6;
public void eat() {
System.out.println("米饭");
}
public void getNum() {
System.out.println(num);
}
}
class Student extends People{
private int num=10;
public void eat() {
System.out.println("炸鸡");
}
public void study() {
System.out.println("good good study");
}
public void getNum() {
System.out.println(num);
}
}
class Teacher extends People{
public void eat() {
System.out.println("拉面");
}
public void study() {
System.out.println("day day up");
}
}
public class Demo {
public static void main(String[] args) {
People p=new Student();//向上转型
p.eat();
p.getNum();
Student stu=(Student)p;//向下转型
stu.study();
stu.eat();
People pp=new Teacher();
pp.eat();
}
}
総括する:
Java实现多态有三个必要条件:继承、重写、向上转型。
继承:在多态中必须存在有继承关系的子类和父类。
重写:子类对父类中某些方法进行重新定义,在调用这些方法时就会调用子类的方法。
向上转型:在多态中需要将子类的引用赋给父类对象,只有这样该引用才能够具备技能调用父类的方法和子类的方法。
只有满足了上述三个条件,我们才能够在同一个继承结构中使用统一的逻辑实现代码处理不同的对象,从而达到执行不同的行为。
对于Java而言,它多态的实现机制遵循一个原则:当超类对象引用变量引用子类对象时,被引用对象的类型而不是引用变量的类型决定了调用谁的成员方法,但是这个被调用的方法必须是在超类中定义过的,也就是说被子类覆盖的方法。