C#类的继承,方法的重载和覆写
在网易云课堂上看到唐大仕老师讲解的关于类的继承、方法的重载和覆写的一段代码,注释比较详细,在此记下以加深理解。
小总结:
1、类的继承:允许的实例化方式:Student t=new Student(),Person p=new Person(),Person p2=t,具有学生属性的人类可以强制转换为学生类:Student t2=(Student)p2,但不可以Student t3=(Student)p;
2、方法的重载:基类方法重载只要求方法名称相同,返回类型、参数数目和参数类型都可以不相同;
3、方法的覆写:只有基类中有virtural修饰的方法才可以在子类中覆写,覆写不能改变基类方法的参数数目、参数类型和返回类型,只能覆写方法的具体实现。如果子类覆写了一个基类的方法,那么子类的实例在调用该方法时实际上调用的是被子类覆写后的方法。如果在基类中该方法有重载的其他方法,那么子类的实例在调用该方法名称时VS会提示有重载方法,此时可以根据函数的返回类型、参数数目和参数类型来确定具体调用的是基类还是子类的方法。简单的说,子类覆写基类的方法后,子类的实例调用该方法时调用的是子类的方法;
using System;
public class Person {
public string name; //定义域
public int age;
virtual public void SayHello(){ //定义方法 //virtual表示可以被子类override
Console.WriteLine("Hello! My name is " + name );
}
public void SayHello( Person another ){ //构造方法重载同名的sayHello方法
Console.WriteLine("Hello," + another.name +
"! My name is " + name );
}
public bool IsOlderThan( int anAge ){ //定义方法
bool flg;
if( age > anAge ) flg = true; else flg=false;
return flg;
}
public Person( string n, int a ){ //构造方法
name = n;
age = a;
}
public Person( string n ){ //构造方法重载
name = n;
age = -;
}
public Person( ):this( "", )//调用其他构造方法
{
}
} public class Student : Person //定义子类
{
public string school; //增加的字段
public int score = ;
public bool isGoodStudent(){ //增加的方法
return score>=;
}
override public void SayHello(){ //override覆盖父类的方法
base.sayHello();
Console.WriteLine( "My school is " + school );
}
public void SayHello( Student another ){ //增加的方法
Console.WriteLine("Hi!");
if( school == another.school )
Console.WriteLine(" Shoolmates ");
} public Student(){ //构造方法
}
public Student(string name, int age, string school )
: base( name, age ) //调用父类的构造方法
{
this.school = school;
} public void TestThisSuper(){
int a;
a = age; //本句与以下两句效果相同
a = this.age; //使用this
a = base.age; //使用base
} public static void Main( string [] arggs )
{
Person p = new Person( "Liming", );
Student s = new Student( "Wangqiang", , "PKU" );
Person p2 = new Student( "Zhangyi", , "THU" );
Student s2 = (Student) p2; //类型转换
}
}
*********************************************************************************
另外,提一下之前我在KD的面试题,关于类的继承、转换和方法调用:
假设有两个类,基类和子类:
class Person
{
public virtual string MethordA()
{
return "Person MethordA()";
}
}
class Student:Person
{
public override string MethordA()
{
return "Student MethordA()";
}
}
那么如下的方法会输出什么结果?
Person p = new Person();
Console.WriteLine("Person p = new Person();p.MethordA()--{0}", p.MethordA());
Student t = new Student();
Console.WriteLine("Student t = new Student();t.MethordA()--{0}", t.MethordA()); Person p2 = t;
Console.WriteLine("Person p2 = t;p2.MthordA()--{0}", p2.MethordA());
Student t2 = (Student)p2;
Console.WriteLine("Student t2 =(Student)p2;t2.MethordA()--{0}", t2.MethordA()); Student t3 =(Student)p;
Console.WriteLine("Student t2 =(Student)p;t2.MethordA()--{0}", t3.MethordA());
结果如下:

其中第11行代码会报错,不能将Person类型的p强制转换为Student。
C#类的继承,方法的重载和覆写的更多相关文章
- 【转】 Java多态特性:重载和覆写的比较
Java重载: 在同一个类中 方法具有相同的名字,相同或不同的返回值,但参数不同的多个方法(参数个数或参数类型) public class MethoDemo{ public static void ...
- Java多态特性:重载和覆写的比較
Java重载: 在同一个类中 方法具有同样的名字,同样或不同的返回值,但參数不同的多个方法(參数个数或參数类型) public class MethoDemo{ public static void ...
- javaSE练习13——(知识点:类的继承 方法的覆盖)
设计2个类,要求如下: (知识点:类的继承 方法的覆盖)1.定义一个汽车类Vehicle, 1.1 属性包括:汽车品牌brand(String类型).颜色color(String类型 )和速度spee ...
- java重载与覆写
很多同学对于overload和override傻傻分不清楚,建议不要死记硬背概念性的知识,要理解着去记忆. 先给出我的定义: overload(重载):在同一类或者有着继承关系的类中,一组名称相同,参 ...
- Objective-c 类的继承 方法重写 方法重载
一.类的继承 Objective-c中类的继承与C++类似,不同的是Objective-c不支持多重继承,一个类只能有一个父类,单继承使Objective-c的继承关系很简单,易于管理程序. Obje ...
- java中的对象,类。与 方法的重载。
对象: 一切皆为对象.对象包括两部分内容:属性(名词形容词),行为(动词).对象和对象之间是有关系的: 派生,关联,依赖. 类: 对同一类别的众多对象的一种抽象.类,还是用来生成对象的一种模板,对象是 ...
- JS中的类,类的继承方法
大牛请无视此篇! 首先我们定义一个类,方法很简单,就像我们定义函数一样,只不过我们为了与函数区分,名称首字母要大写,看代码: function Person (){ } 这就是一个很简单的Poson类 ...
- JAVA笔记2__类/封闭性/构造方法/方法的重载/匿名对象
public class Main { public static void main(String[] args) { Chicken c1 = new Chicken(); Chicken c2 ...
- c++重载与覆写
重载:指子类改写了父类的方法,覆写:指同一个函数,同样的参数列表,同样的返回值的,但是函数内部的实现过程不同. 重载: 1.方法名必须相同. 2.参数列表必须不相同,与参数列表的顺序无关. 3.返回值 ...
随机推荐
- YYCache设计思路及源码学习
设计思路 利用YYCache来进行操作,实质操作分为了内存缓存操作(YYMemoryCache)和硬盘缓存操作(YYDiskCache).内存缓存设计一般是在内存中开辟一个空间用以保存请求的数据(一般 ...
- Media Player插件
<object classid="clsid:22D6F312-B0F6-11D0-94AB-0080C74C7E95" id="MediaPlayer1" ...
- 优秀开发人员网站推荐。——Arvin
常用论坛汇总:智能车制作论坛:http://www.znczz.com/中国电子网:http://www.21ic.com/爱板网:http://www.eeboard.com/电子发烧友:http: ...
- BZOJ2933:POI1999地图
Description 一个人口统计办公室要绘制一张地图.由于技术的原因只能使用少量的颜色.两个有相同或相近人口的区域在地图应用相同的颜色.例如一种颜色k,则A(k) 是相应的数,则有: 在用 ...
- [ubuntu]用ubuntu开发的日子----win7 ubuntu双系统
小子终于忍不了win7某些蛋疼的设定,看群里好多大牛推荐mac,但资金紧张,只好推而求其次使用ubuntu,但是由于公司工作环境是windows,所以还必须保留windows系统,一次决定双系统. 下 ...
- Excel数据批量导入到数据库
1.今天做批量导入网上找了个例子,改了改,运行起来了.用POI实现Excel的读取,需要jar包. 2.ReadExcel.java读取数据 /** * */ package com.b510.exc ...
- 推荐10款免费的在线UI测试工具
发布网站之前至关重要的一步是网站测试.网站测试要求我们全面地运行网站并通过所有基本测试,如响应式设计测试.安全测试.易用性测试.跨浏览器兼容性.网站速度测试等. 网站测试对SEO.搜索引擎排名.转换率 ...
- 如何解决子元素设了margin-top之后父元素所受的影响
解决方法: 1.在父元素上加:overflow:hidden. 2.给父元素加border; 3.外容器上加上padding.
- cmd 常用指令
d: 进入d盘 cd xxx 进入某个目录
- VHDL的参数写在一个vhd文件里
1 参数文件top_pkg.vhd