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个语言实现多态的方式,因为现在学了太多的语言有时候就会思想混乱,错把一个语言实现多态的方法当成另一个,写了这文后希望自己以后能记住。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值