上向きモデリング
1.上向きモデリングとは何ですか?
1.上向きモデリング:親クラスはサブクラスのオブジェクトを参照します
1.1。上方モデリングの定義
- 1)スーパータイプ(親クラス)は、派生クラス(サブクラス)のオブジェクトを参照します。
- 2)参照変数で指摘できることは、参照タイプによって異なります。
- 3)注:いくつかのことわざは上向き変換と呼ばれ、同じことを意味します。
- 次の例を含め、コード栗を見る前に、次の3つの概念を覚えておいてください。
上方モデリング------親クラスは子クラスのオブジェクト
オーバーロードを参照します------メソッド名は同じです、パラメータリストが異なる、
メソッド名が同じ、パラメータリストが同じ、メソッド本体が異なる
public class UploadDemo {
public static void main(String[] args) {
Aoo o1 = new Aoo();
o1.a = 1;
o1.show();
Boo o2 = new Boo();
o2.a = 1;
o2.b = 2;
o2.show();
//超类型引用指向派生类的对象
Aoo o3 = new Boo();
o3.a = 1;
o3.show();
//o3.b = 2; //报错!向上造型:能点出什么,看引用的类型。
//若要使它不报错,得在父类加不是私有变量b
}
}
class Aoo{
int a;
void show() {
System.out.println("我是超类(父类)");
}
}
class Boo extends Aoo{
int b;
void show() {
System.out.println("我派生类(子类)");//超类方法被重写
}
}
- 運用結果
1.2。上向きのモデリングの詳細の補足
- 一部の本では、それは上部変換オブジェクトと呼ばれています。しかし、定義と理論は同じです。コードを使用して、栗に理解を与えてください。
- 上位の変換オブジェクトの特性:
- 1.継承を操作したり、メンバー変数を非表示にしたり、サブクラスの継承を呼び出したり、メソッドをオーバーライドしたりできます。
- 2.サブクラスの新しいメンバー変数を操作できず、サブクラスの新しいメソッドを呼び出すことができません。
- コード例は次のとおりです。
2.メソッドの書き換えと従うべき書き換えルール
2.1。メソッドの書き換え
- 2.1.1親クラスと子クラスで発生し、メソッド名とパラメーターリストは同じであり、メソッド本体は同じです。
- 2.1.2オーバーライドされたメソッドが呼び出されるとき、それはオブジェクトのタイプに依存します。
- 栗を見てみましょう:
package oop.day04;
class Dongwu {
//父类
protected String name;
protected int age;
public Dongwu(String name, int age){
this.name = name;
this.age = age;
}
public void runing(){
System.out.println(name+"今年"+age);
}
}
class Cat extends Dongwu{
//子类
int weight; //重量
public Cat(String name, int age, int weight){
super(name,age);
this.weight = weight;
}
public void runing(){
System.out.println(name+"今年"+age+",重量"+weight+"KG");
}
}
class Dog extends Dongwu{
//子类
int size; //大小
public Dog(String name, int age, int size){
super(name,age);
this.size = size;
}
public void runing(){
System.out.println(name+"今年"+age+",大小"+size+"KG");
}
}
public class Test3 {
public static void main(String[] args) {
Dongwu[] dw = new Dongwu[3];
dw[0] = new Cat("加菲猫",8,50);
dw[1] = new Dog("阿拉斯加",15,70);
dw[2] = new Dog("英短猫",13,80);
for(int i=0; i<dw.length; i++) {
System.out.println(dw[i].name);
dw[i].runing();
}
}
}
- 結果:
2.2。ルールの書き換え
- 従う:「2つの同じ、2つの小さい、1つの大きい」原則。
- 2つ同じ:メソッド名は同じで、パラメーターリストも同じです。
- 2つの小さい:派生クラス(サブクラス)メソッドの戻り値タイプがスーパークラス(親クラス)メソッド以下です。
- 2番目の小学校は参照します:
- voidに戻り値がない場合、それは同じでなければなりません。
- 基本データタイプは同じである必要があります(つまり、戻り値タイプ)。
- データタイプを参照する場合、それはスーパークラス(親クラス)以下です。
- 2番目の小学校は参照します:
- 派生クラス(サブクラス)メソッドによってスローされる例外は、スーパークラス(親クラス)メソッド以下です。
- 一大:
- 派生クラス(サブクラス)のメソッドのアクセス権は、スーパークラス(親クラス)のメソッド以上です。
- 栗を見てください:
package oop.day04;
//重写
public class OverrideDemo {
public static void main(String[] args) {
}
}
class Coo{
void test() {
}
int then() {
return 0;
}
double show() {
return 0.0;
}
Doo say() {
return null;
}
}
class Doo extends Coo{
//int test() {return 5;} //编译错误,void时必须相同
//int then() {return 1.1;} //编译错误,返回值类型必须小于或等于超类。不能返回double型1.1
//int show() {return 0;} //编译错误,基本数据类型必须相同,即返回值类型相同。show()方法定义了double型了
//Coo say() {return null;} //编译错误,引用类型时必须小于或等于超类
Doo say() {
return null;} //超类大于派生类(这里指代的访问权限即访问修饰符)
//访问修饰符的讲解,将在下一篇内容提到。感谢阅读者的支持
}
3.書き換えとオーバーロードの違い
3.1違い
-
過負荷----------メソッド名は同じですが、パラメーターリストは異なります
-
書き換え----------メソッド名は同じ、パラメータリストは同じ、メソッド本体が異なる
-
次のコードの例を見てください。
-
オーバーロードしてパラメータタイプを確認し、書き直してオブジェクトタイプを確認し、新しいオブジェクトを言うこともできます(強調!強調!強調!重要!3回言ってください)
package oop.day04;
//重写与重载
public class OverrideOverloasDemo {
public static void main(String[] args) {
//重载看参数类型,重写看对象类型,也可以说new出的对象(重点!重点!重点!重要的说三遍)
Goo goo = new Goo();
Eoo o = new Foo(); //向上造型 ------父类引用指向子类的对象。
goo.test(o);
Eoo foo = new Eoo();//当前new对象是Eoo
foo.show();
}
}
class Goo{
//重载-------方法名相同,参数列表不同,方法体不同
void test(Eoo o) {
System.out.println("超类型参数");
o.show();
}
void test(Foo o) {
System.out.println("派生类型参数");
o.show();
}
}
class Eoo{
void show() {
System.out.println("超类show");
}
}
class Foo extends Eoo{
void show() {
System.out.println("派生类show");//show()方法被重写,若没被重写,则调用超类的方法“超类show”
}
}
- 結果は次のことを示しています。
フォローアップの内容をお待ちください。すぐに来てください!書くのは簡単ではありません、3Qのようにしてください
エラーがある場合はコメントしてください
チャプタリストはこちらです:https://blog.csdn.net/qq_41254299/article/details/106638651
再印刷のためのソースを記入してください:https://blog.csdn.net/qq_41254299
この記事はからである[Superclover_のブログ]