C++,C#與JAVA實現多態的比較

 

 今天爲了過幾天的筆試,複習了一下面向對象的多態,比較了一下C++,C#和JAVA實現多態的方法,發現JAVA實現多態比前兩者簡單很多,只要在子類中override父類的方法就可以了,不需要加什麼關鍵字,JAVA這樣就可以直接實現多態了

 再看看C#,需要在父類方法前加virtual,子類繼承的方法前加override纔可以實現多態,兩者少一個都不可以,就說就算你父類加了virtual,子類如果沒有override或者是個new是不能實現多態的,如果父類沒有virtual子類沒有override關鍵字那就更不可以了,看下面代碼:

 

using System;
 
abstract class A
{
    
public virtual void F()
    
{
        Console.WriteLine(
"A.F");
    }

    
public abstract  void G();
    
internal virtual void  a()
    
{
        Console.WriteLine(
"A.F");
    }

}


class B:A
{
      
public  override  void F()
    
{
        Console.WriteLine(
"B.F");
    }

    
public override void G()
    
{
        Console.WriteLine(
"B.G");
    }

    
internal new void a()
    
{
        Console.WriteLine(
"B.F");
    }

}


class Class1
{
    
/// <summary>
    
/// 應用程序的主入口點。
    
/// </summary>

    [STAThread]
    
static void Main(string[] args)
    
{
        B b 
= new B();
        A a 
= b;
        a.F();
        a.G();
        b.F();
        b.G();
        a.a();
        b.a();
    }

}

 

結果:

B.F
B.G
B.F
B.G
A.F
B.F

再來談一談才C++的多態,C++的多態實現只要在父類方法前加virtual申明爲虛函數就可以了,子類需要重載不需要加光鍵字,加了反而錯。

寫以上文章僅僅爲了幫助自己記憶3個語言實現多態的方式,因爲現在學了太多的語言有時候就會思想混亂,錯把一個語言實現多態的方法當成另一個,寫了這文後希望自己以後能記住。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章