zoukankan      html  css  js  c++  java
  • 【C# .Net】继承重写父类方法,C# 与 JAVA的不同之处

    一直都没仔细研究c#重写,new关键字的作用,最近在回头看书,复习C#基础的时候才发现了 C# 重写和 JAVA大不一样的地方。

    C#

    提供特定实现的子类可以重写(override)标识为 virtual 的函数、方法、属性、索引器和事件都可以声明为 virtual

    class Program
        {
            class Fa
            {
                public string Get1()
                {
                    return "Fa1";
                }
                public virtual string Get2()
                {
                    return "Fa2";
                }
                public string Get3()
                {
                    return "Fa3";
                }
            }
            class C : Fa
            {
                public string Get1()         {
                    return "C1";
                }
                public override string Get2()
                {
                    return "C2";
                }
                public new string Get3()
                {
                    return "C3";
                }
            }
            static void Main(string[] args)
            {
                Fa f = new C();
                Console.WriteLine(f.Get1()); // Fa1,原因Get1()方法并没有形成重写,调用A的Get1()方法
                Console.WriteLine(f.Get2()); // C2,原因Get2()方法形成了重写,会调用B的方法
                Console.WriteLine(f.Get3()); // Fa3,原因Get3()方法并没有形成重写,调用A的Get1()方法
            }
        }

    运行结果

     在Class C 的 Get1 方法上会出现黄色warning:隐藏继承的成员“Program.Fa.Get1()”。如果是有意隐藏,请使用关键字 new

    这是因为C#可以用new关键字隐藏父类的同名方法,按照我的理解是,声明这是一个新的方法,切断其与父方法的联系。

    而JAVA则不存在这个概念,Java书中写的是继承的时候会用到覆盖来形容子类重写父类函数

    C#中重写必须在父方法上使用abstract,virtual关键字,在子方法使用override关键字修饰。否则编译器则会视为不同的方法

    Java

    public class  Fa{
        public string Get(){
            return "Fa";
        }
    }
    public class C extends A{
        public string Get(){
                return "A";
        }
    }
    public static void main(string[] args){
       Fa f = new C();
       System.out;.println(f.Get1()); // A, Get1()方法自动被子类重写覆盖
    } 
  • 相关阅读:
    转:关于C++ const 的全面总结
    HDOJ->考新郎(sdut1021)
    有些人笑着,其实心里哭的很疼
    HDU-2084 数塔
    SDUT2176 -> 递归的函数
    删数问题(SDUT2072 )
    微信2种access_token对比
    nginx配置C compiler cc is not found
    ftp无法连接的原因
    php的ftp类
  • 原文地址:https://www.cnblogs.com/simawenbo/p/14452870.html
Copyright © 2011-2022 走看看