`
kamiff
  • 浏览: 88226 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

C#中override重写与new隐藏的区别,以及C#与Java的override区别

阅读更多
C#比java多一个 new隐藏  的功能。C#中的override重写相当于java中没有关键字的方法重写。 所以java中方法是没有隐藏功能的。


在C#中: override重写,是指对父类中的虚方法(标记virtual)或抽象方法(标记为abstract)进行重写,实现新的功能,它必须与父类方法的签名完全一致,而且与父类方法的可访问性也必须一致 new方法隐藏,是指在子类中重新定义一个签名与父类的方法相同的方法,这个方法可以不用new修饰,只是编译时会弹出一个警告信息:如果是有意隐藏,请使用关键字 new。


using System;  
public class Test   
{  
    public static void Main(String[] args){  
        A a=new B();   
        Console.Write(a.getVal()); // 输出:A 虽然实例是B,但是执行的却是A的方法  
 
        a=new C();   
        Console.Write(a.getVal()); // 输出:C 实例是C,而且C重写的A的方法,所以执行C的方法  
 
        B b=new B();   
        Console.Write(b.getVal()); // 输出:B 只有定义和实例都是B,才执行B的方法  
    }   
}  
class A  
{  
    // 要允许子类重写,方法必须标识为virtual 或 abstract  
    public virtual String getVal(){   
        return "A";   
    }   
}   
class B : A  
{  
    // 隐藏父类方法 用new标识,不标识时会出现编译警告,不影响使用  
    public new String getVal(){   
        return "B";   
    }   
}   
class C : A  
{  
    // 重写方法 必须用override标识  
    public override String getVal(){   
        return "C";   
    }   
}  


而在Java中,不存在隐藏父类方法这一概念,Java只有重写方法这一概念,同样的代码,在Java中执行和C#中执行截然不同:


class test  
{  
    public static void main(String[] args)  
    {  
        A a=new B();   
// 输出:B  实例是B,执行的也是B的方法(在C#中,此时应该输出A)  
        System.out.println(a.getVal());   
         a=new A();   
// 输出:A 只有定义和实例都是A,才执行A的方法  
        System.out.println(a.getVal());   
    }  
}  
class A  
{  
    public String getVal(){   
        return "A";   
    }   
}   
class B extends A  
{  
    public String getVal(){   
        return "B";   
    }   
}  

分享到:
评论

相关推荐

    C#重写重载与多态

    重写:是指重写基类的方法,在基类中的方法必须有修饰符virtual,而在子类的方法中必须指明override。重载:用于在给定了参数列表和一组候选函数成员的情况下,选择一个最佳函数成员来实施调用。多态:c#的多态性...

    重写(override)和重载(overload)的区别

    C#中方法的重写(override)和重载(overload)的区别

    C#中Override关键字和New关键字的用法详解

    C# 语言经过专门设计,以便不同库中的基类与派生类之间的版本控制可以不断向前发展,同时保持向后兼容。这具有多方面的意义。例如,这意味着在基类中引入与派生类中的某个成员具有相同名称的新成员在 C# 中是完全...

    重写、隐藏基类(new, override)的方法

    重写、隐藏基类(new, override)的方法,需要的朋友可以参考一下

    详解C#用new和override来实现抽象类的重写区别

    本篇文章主要介绍了详解C#用new和override来实现抽象类的重写区别,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧。

    c#方法重写和隐藏的学习示例

    2:方法隐藏:无论基类中的方法是否用了virtual关键字,继承类中都可以用new关键字(如果不用new的话,不会产生错误,但会生成一个编译警告)将基类中的方法隐藏,所谓隐藏就是隐藏,不像重写,重写就是原来的(基类...

    C#中多态、重载、重写区别分析

    本文实例总结了C#中多态、重载与重写的概念与区别。对于初学C#的朋友来说有不错的参考价值。分享给大家供大家参考。具体分析如下: 重写:是指重写基类的方法,在基类中的方法必须有修饰符virtual,而在子类的方法中...

    C#中方法的重写

    本文为您介绍C#中方法的重写的文章,具体方法请看介绍  问题一:什么是重写?  “重写”父类方法是修改它的实现方式或者说在子类中对它进行重新编写。  问题二:为什么要重写父类的方法?  通常,子类继承...

    C#中重载与重写区别分析

    前段时间,刚学完C#,其中重载、重写傻傻分不清楚。如今通过查阅资料对这两者有了一个大概的理解,不足之处还请多多指教。 二、定义  重载:在同一定义域内(比如一个类里面)。方法名相同,参数个数、次序、类型...

    c#基础学习问答c#基础学习问答

    c#学习问答 包括: 1.静态变量和非静态变量的区别? 2.const 和 static readonly 区别? 3.extern 是什么意思? 4.abstract 是什么意思? 5.internal 修饰符起什么作用? 6.sealed 修饰符是干什么的? 7.override 和 ...

    C#.net期末复习题

    4.C#中的委托是什么?事件是不是一种委托? 答 : 委托可以把一个方法作为参数代入另一个方法。 委托可以理解为指向一个函数的引用。 是,是一种特殊的委托 ...Override 是进行基类中函数的重写。为了适应需要。

    在一小时内学会 C#(txt版本)

    和 C++ 有所区别的是,C# 中没有单独的声明(头)和实现(CPP)文件。所有代码(类声明和实现)都放在扩展名为 cs 的单一文件中。 看看 C# 中的 Hello World 程序。 复制内容到剪贴板 代码: using System; ...

    C#基础考试题

    1) 在C# 的语法中,( A)关键字可以实现在派生类中对基类的虚函数进行重写. (选择一项) a) override b)new c)static d)virtual 2)关于下面的C# 代码 public static void Main( ) { int p=0; for (int i=1; i;i++) ...

    C#最新面试题(127道)word格式

    共享给正在找C#相关面试题的人,一共127道。都背下来一定对你面试有帮助。。。 例如。。。 1. 简述 private、 protected、 public...Override 是进行基类中函数的重写。为了适应需要。 下面还有。。。下下来看吧 ~~~

    C#隐藏主窗口的方法小结

    本文实例总结了C#隐藏主窗口的方法。分享给大家供大家参考,具体如下: 要求在程序启动的时候主窗口隐藏,只在系统托盘里显示一个图标。一直以来采用的方法都是设置窗口的ShowInTaskBar=false, WindowState=...

    两种重写方法的内存机制

    在内存机制上理解 new 和 override/virtual

    C#程序设计试卷.doc

    重写基类的虚方法时,为消除隐藏基类成员的警告,需要带上new修饰符 " "D.重写基类的虚方法时,需要同时带上override和virtual修饰符 " "3.如果要定时器控件每一分钟发生一个Tick事件,则InterVal属性应设置为( ...

    C#基础概念.doc

    C#基础概念: 1、静态变量和非静态变量的区别? 2、const 和 static readonly 区别? 3、extern 是什么意思? 4、abstract 是什么意思? 5、internal 修饰符起什么作用? 6、sealed 修饰符是干什么的? 7、override...

    你必须知道的C#的25个基础概念(附源码)

    先自己复习一下,看看下面的C#问题都能回答上来么? 1.静态变量和非静态变量的区别? 2.const 和 static readonly 区别? 3.extern 是什么意思? 4.abstract 是什么意思? 5.internal 修饰符起什么作用? 6.sealed ...

Global site tag (gtag.js) - Google Analytics