上向き変換と下向き変換に関するその他のオンライン情報は、読者には完全には理解できないため、誰もが理解しやすいようにチュートリアルを書き直すことにしました。
上向きの変換:サブカテゴリを親カテゴリに変換します。
ダウンキャスト:親クラスを子クラスに変換します。
継承の準備
例を段階的に見ていきましょう。
変換は継承に基づいているため、最初にサブクラスを実装して親クラスを継承します。
/**
* 父类
*/
class Father {
String name = "爸爸";
public void sleep() {//睡觉方法
System.out.println(name + "睡觉");
}
}
/**
* 子类继承父类
*/
class Son extends Father {
String name = "儿子";
public void p() {//调皮方法
System.out.println(name + "调皮");
}
}
式形式
上向き変換
public class UpAndDown {
public static void main(String[] args) {
// 向上转型:将父类引用指向子类对象
Father f = new Son();
f.sleep();//输出“爸爸睡觉”
//如果f.p();编译出错,不可执行。因为p()不是Father的方法。
}
}
fはSonオブジェクトのアップトランスフォーメーションによって取得されますが、現時点ではFatherクラスに属し、サブクラスのp()メソッドを実装していないため、fp()は使用できません。これはaと見なすことができます。現時点では一種の「痩身」です。
ダウンキャスト
は、サブカテゴリにする必要がある場合でも、上記の例です。コードは以下のように表示されます。
public class UpAndDown {
public static void main(String[] args) {
// 向下转型
Father f = new Son();
((Son)f).P();//输出“儿子调皮”
}
}
嬉しい驚きでしたか?親クラスはサブクラスに変換され、サブクラスの一意のメソッドが復元されます。
では、直接下向きに移行している場合はどうなるでしょうか。
public class UpAndDown {
public static void main(String[] args) {
// 直接向下转型
Father f = new Father();
f.sleep();//输出“爸爸睡觉”
((Son)f).P();//报错!!!!!!!!!!
}
}
ダウンキャストは親メソッドの呼び出しを遅らせないようです。
ただし、直接下向きの変換ではエラーが報告されます。プロンプトは次のとおりです。
Exception in thread "main" java.lang.ClassCastException: lanqiao.Father cannot be cast to lanqiao.Son
at lanqiao.UpAndDown.main(UpAndDown.java:7)
つまり、型変換は異常であり、父は息子に変換できません。
この現象は素人の言葉で理解できます。
アップキャストはそれ自体を隠す方法として使用できるため、元に戻す(ダウンキャスト)メソッドは元の状態に戻ります。それはあなたのものかあなたのものか。
直接下向き変換。親カテゴリには子カテゴリの固有の方法がないため、変換が成功した場合でも、障害のある息子であるため、向きを変えない方がよいため、変換の失敗を直接報告してください。それがあなたでなければ、それについて考えさえしないでください。
実際には、次のようになります。
メモリ内では、アップキャストはサブクラスのオブジェクトへの親クラスの参照を参照するため、親クラスが持つ必要のあるプロパティとメソッドのみを指し、サブクラスの一意のメソッドとプロパティは指しません(または非表示)、サブカテゴリに強制された場合。サブクラスオブジェクトを再び指し、それに属するものが復元されます。
写真に来てください:
さて、変換の目的は何ですか?
アップキャスティングとダウンキャスティングの使用
アップキャスティング
このように、私たちは誰もが踊ることができることを理解しており、男性と女性で踊ることは異なります。(女性の女性、慈悲深くしてください!)
コードを持っているふりをします:
Personにdance()メソッドがあるとします。
男性は人を拡張します女性は人を拡張します
このとき、男性も女性も人の踊りを書き直しました();
Person p = new Man(); p.dance(); //今回は男性のダンスメソッドを呼び出す
場合Personp = new Woman(); p.dance(); //今回は呼び出す女性のダンスダンスの方法
これは実際にはJavaの継承、ポリモーフィズムであり、プログラムの拡張に役立ちます。この設計方法を理解する必要があります。これにより、より保守しやすく簡潔なコードを記述できるようになります。
下向きの変化、
十分なインスピレーションではない、それを一緒にコピーする:(私を殴らないでください)
https://blog.csdn.net/xyh269/article/details/52231944