zoukankan      html  css  js  c++  java
  • override Method与new Method的区别

    1,首先这个问题是建立在父类对象指向子类类型的,先不多说了,先上代码

    代码一:输出结果为 A、B、A.fun

    View Code
     1 using System;
     2 
     3 namespace ConsoleApplication1
     4 {
     5     class Program
     6     {
     7         static void Main(string[] args)
     8         {
     9             A a = new B();
    10             a.fun();
    11         }
    12     }
    13 
    14    public class A
    15     {
    16        public A()
    17         {
    18             Console.WriteLine("A");
    19         }
    20 
    21        public virtual void fun()
    22         {
    23             Console.WriteLine("A.fun");
    24         }
    25     }
    26 
    27     public class B:A
    28     {
    29        public B()
    30         {
    31             Console.WriteLine("B");
    32         }
    33 
    34         new public void fun()
    35         { 
    36             Console.WriteLine("B.fun");
    37         }
    38     }
    39 }

    代码二:输出结果为:A、B、B.fun

    View Code
     1 using System;
     2 
     3 namespace ConsoleApplication1
     4 {
     5     class Program
     6     {
     7         static void Main(string[] args)
     8         {
     9             A a = new B();
    10             a.fun();
    11         }
    12     }
    13 
    14    public class A
    15     {
    16        public A()
    17         {
    18             Console.WriteLine("A");
    19         }
    20 
    21        public virtual void fun()
    22         {
    23             Console.WriteLine("A.fun");
    24         }
    25     }
    26 
    27     public class B:A
    28     {
    29        public B()
    30         {
    31             Console.WriteLine("B");
    32         }
    33 
    34         public override void fun()
    35         { 
    36             Console.WriteLine("B.fun");
    37         }
    38     }
    39 }

    代码一与代码二的主要区别就是在class B中对方法fun()的修士符,代码一是new  代码二是override吗,而两者的结果却截然不同,后来想了想,明白了

    2.new Method实际上是新写了一个函数,基类里的仍然存在,当基类对象调用方法的是还是调用基类里面的方法;

         而override是重写了基类里的函数,一旦子类被被执行过,那么基类里的这个方法就被彻底隐藏了,指向子类的对象就会执行子类里面的方法。

  • 相关阅读:
    webGL 光照
    Go语言入门之指针的使用
    Go语言入门之变量声明
    服务器开启防火墙
    Linux安全之密钥登录
    Mysql优化之my.cnf参数优化
    程序员工作法
    laravel中新增路由文件
    Mysql用户管理(远程连接、授权)
    Laravel通过Swoole提升性能
  • 原文地址:https://www.cnblogs.com/oracleblogs/p/3020619.html
Copyright © 2011-2022 走看看