A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 许庭洲 黑马帝   /  2012-10-9 14:14  /  1874 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

程序清单:
using System
class Vehicle  //定义汽车类
{
        int wheels;//公有成员:轮子个数
        protected float weight; //保护成员:重量
        public Vehicle(){;}
        public Vehicle(int w,float g){
                  wheels = w;
                  weight = g;
             }
        public void Speak(){
             Console.WriteLine("the w vehicle is speaking!");
        }
};
class Car:Vehicle //定义轿车类:从汽车类中继承
{
         int passenger;  //私有成员:乘客数
         public Car(int w,float g,int p):base(w,g)
         {
                  wheels = w;
                  weight = g;
                  passengers = p;
          }
}

类Car继承了Vehicle的Speak()方法。在这里可以给Car类也声明一个Speak()方法,覆盖Vehicle中的Speak,见下面的代码:
using System;
class Vehicle//定义汽车类
{
       public int wheels;//公有成员:轮子个数
       protected float weight; //保护成员:重量
       public Vehicle(){;};
       public Vehicle(int w,float g){
                wheels = w;
                weight = g;
               }
       public void Speak(){
             Console.WriteLIne("the w vehicle is speaking!");
        }
}
class Car:Vehicle//定义轿车类
{
        int passengers;//私有成员:乘客数
         public Car(int w,float g,int p){
                 wheels = w;
                 weight = g;
                 passengers = p;
          }
          new public void Speak(){
                 Console.WriteLine("Di-di!");
    }
}

注意:如果在成员声明中加了new关键字修饰符,而该成员事实上并没有覆盖继承的成员,编译器将会给出警告。在一个成员声明同时使用new和override 则编译器会报告错误。


2 个回复

倒序浏览
这个new可以隐藏它上面所有基类的相同签名方法。
为什么要用new呢。
如果基类的同名方法没有virtual,没有virtual就不能被override,只能通过new来强制隐藏父类方法,并实现自己的方法。
回复 使用道具 举报
你这分数什么情况
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马