AJPFX关于多态的应用
要求設計一個方法,要求此方法可以接受A類的任意子類對象,并調用方法,此時,如果不使用對象多態性,那代碼肯定會類似如下
class A{ // 定義類A
public void Run1(){ // 定義Run1()方法
System.out.println("A類----Run1方法") ;
}
public void Run2(){
Run1() ; // 調用父類的Run1()方法
}
}
class B extends A{
public void Run1(){ // 覆寫父類中的Run1方法
System.out.println("B類----Run1方法") ;
}
public void Run3(){ // B類特有的方法
System.out.println("B類----Run3方法") ;
}
}
class C extends A{
public void Run1(){ // 覆寫父類中的Run1方法
System.out.println("C類----Run1方法") ;
}
public void Run5(){ // C類特有的方法
System.out.println("C類----Run5方法") ;
}
}
public class Demo6{
public static void main(String asrgs[]){
Run(new B()) ; // 傳遞B類的實例 B b = new B();
Run(new C()) ; // 傳遞C類的實例 C c = new C();
}
public static void Run(B b){
b.Run1() ; // 調用覆寫父類中的Run1()方法
}
public static void Run(C c){
c.Run1() ; // 調用覆寫父類中的Run1()方法
}
}
復制代碼
以代碼雖然實現要求,但可以發現:如果按照如上方式完成程序,這就相當于產生了一個A類的子類時,Run()方法就要重載一次,則每一次擴充子類都要修改類本身,這樣肯定不太好,那么如果使用對象多態性完成呢?具體代碼如下
class A{ // 定義類A
public void Run1(){ // 定義Run1()方法
System.out.println("A類----Run1方法") ;
}
public void Run2(){
Run1() ; // 調用父類的Run1()方法
}
}
class B extends A{
public void Run1(){ // 覆寫父類中的Run1方法
System.out.println("B類----Run1方法") ;
}
public void Run3(){ // B類特有的方法
System.out.println("B類----Run3方法") ;
}
}
class C extends A{
public void Run1(){ // 覆寫父類中的Run1方法
System.out.println("C類----Run1方法") ;
}
public void Run5(){ // C類特有的方法
System.out.println("C類----Run5方法") ;
}
}
public class Demo6{
public static void main(String asrgs[]){
Run(new B()) ; // 傳遞B類的實例,產生向上轉移
Run(new C()) ; // 傳遞C類的實例,產生向上轉移
}
//接收父類對象
public static void Run(A a){//相當于 A a = new B() & A a = new C()
a.Run1() ; // 調用覆寫父類中的Run1()方法
}
}
復制代碼
上代碼中在Run()方法中使用了對象的多態性,所以可以接收任何子類的對象,這樣無論子類如何增加,Run()方法都不用做任何的改變,因為發生了對象的向上轉型關系后,調用的方法一定是被子類覆寫過的方法。
轉載于:https://blog.51cto.com/14314113/2390706
總結
以上是生活随笔為你收集整理的AJPFX关于多态的应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 科技旗舰天花板 一图看懂荣耀Magic5
- 下一篇: 九号电动滑板车 E2 / Plus 系列