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()方法自动被子类重写覆盖
    } 
  • 相关阅读:
    头信息已输出的报错信息位置定位
    阅读<php程序设计>笔记
    include、ruquire使用相对路径总结
    php中未定义的变量使用技巧
    Oracle官方教材(9i、10G及App 11i)
    Vista的软件兼容性
    轻松找回Vista序列号
    oralce定时执行存储过程任务设置步骤详细
    今天做了内存测试,发现真的是内存问题导致的一连串的问题
    网络邮盘(GMailStore) V3.0.2
  • 原文地址:https://www.cnblogs.com/simawenbo/p/14452870.html
Copyright © 2011-2022 走看看