1.继承:我们可能会在一些类中,写一些重要的成员,将这些重复的成员单独的封装到一个类中,作为这些类的父类。

Student    Teacher     Driver                             子类     也叫派生类

Person                                                            父类     也叫基类

子类继承了父类,那么子类从父类那里继承过来了什么

首先,子类继承了父类的属性和方法,但是子类并没有继承父类的私有字段。

2.子类不能继承父类的构造函数,但是,子类会默认的调用父类无参数的构造函数,创建父类对象,让子类可以使用父类中的成员。

所以,如果父类中重新写了一个有参数的构造函数之后,那么无参数的就被干掉了。

子类就掉用不到了,所以子类会报错。

解决方法:

1.在父类中重新写一个无参数的构造函数。

2.在子类中显示父类的构造函数,使用关键字:base()

3.继承的特性

1).继承的单根性:一个子类只能继承继承一个父类。

2).继承的传递性。

4. object是所有类的基类。

5.new关键字
1)、创建对象
2)、隐藏从父类那里继承过来的同名成员。
隐藏的后果就是子类调用不到父类的成员。

里氏转换法:

1、里氏转换
1)、子类可以赋值给父类
2)、如果父类中装的是子类对象,那么可以讲这个父类强转为子类对象。

2、
子类对象可以调用父类中的成员,但是父类对象永远都只能调用自己的成员。

3、
is:表示类型转换,如果能够转换成功,则返回一个true,否则返回一个false
as:表示类型转换,如果能够转换则返回对应的对象,否则返回一个null

  static void Main(string[] args)
{
//1、里氏转换
//1)、子类可以赋值给父类,如果有一个地方需要父类作为参数,我们可以给一个子类来代替
//Student s = new Student();
//Person p = s;
Person p = new Student();
//string str = string.Join("|", new string[]{"1","2","3","4"});
//Console.WriteLine(str);
//Console.ReadKey();
//2)、如果父类中装的是子类对象,那么可以讲这个父类强转为子类对象。
//if (p is Student)
//{
// Student ss = (Student)p;
// ss.StudentSayHello(); //}
//else
//{
// Console.WriteLine("转换失败");
//}
//as用法
Student t=p as Student;
t.StudentSayHello(); Console.ReadKey();
}
public class Person
{
public void PersonSayHello()
{
Console.WriteLine("我是父类");
}
}
public class Student : Person
{
public void StudentSayHello()
{
Console.WriteLine("我是学生");
}
}
public class Teacher:Person
{
public void TeacherSayHello()
{
Console.WriteLine("我是老师");
}
}

里氏转换小练习:

 namespace 里氏转换法练习
{
class Program
{
static void Main(string[] args)
{
//创建一个对象,通过一个循环,来调用他们打招呼的方法
//Student s = new Student();
//Person p = new Person();
//ShuaiGuo sg = new ShuaiGuo();
Person[] pers = new Person[];
Random r = new Random();
for (int i = ; i < pers.Length; i++)
{
int rNumber = r.Next(, );//产生一个1-6的随机数;
switch (rNumber)
{
case : pers[i] = new Student();
break;
case : pers[i] = new Teacher();
break;
case : pers[i] = new ShuaiGuo();
break;
case : pers[i] = new MeiNv();
break;
case : pers[i] = new YeShou();
break;
case : pers[i] = new Person();
break;
}
}
for (int i = ; i < pers.Length; i++)
{
if (pers[i] is Teacher)
{
((Teacher)pers[i]).TeacherSayHi();
}
else if (pers[i] is YeShou)
{
((YeShou)pers[i]).YeShouSayHi();
}
else if (pers[i] is MeiNv)
{
((MeiNv)pers[i]).MeiNvSayHi();
}
else if (pers[i] is Student)
{
((Student)pers[i]).StudentSayHi();
}
else if (pers[i] is ShuaiGuo)
{
((ShuaiGuo)pers[i]).ShuaiGuoSayHi();
}
else
{
pers[i].PersonSayHi();
}
}
Console.ReadKey();
} }
public class Person
{
public void PersonSayHi()
{
Console.WriteLine("我是人类");
}
}
public class Student : Person
{
public void StudentSayHi()
{
Console.WriteLine("我是学生");
}
}
public class Teacher : Person
{
public void TeacherSayHi()
{
Console.WriteLine("我是老师");
}
}
public class MeiNv : Person
{
public void MeiNvSayHi()
{
Console.WriteLine("我是美女");
}
}
public class ShuaiGuo : Person
{
public void ShuaiGuoSayHi()
{
Console.WriteLine("我是帅锅");
}
}
public class YeShou : Person
{
public void YeShouSayHi()
{
Console.WriteLine("我是菜狗");
}
}
}

最新文章

  1. PYTHON 全局变量和局部变量
  2. 完美C++(第5版)(双色)
  3. github page 构建自己的页面
  4. android学习笔记57——Service_2
  5. GET方法传递中文参数乱码解决办法
  6. 使用Html5+C#+微信 开发移动端游戏详细教程 :(一)序(关于作者创业失败的感想)
  7. 《Java程序设计》课程总结
  8. 开发系统时候运行程序突然报出“WebDev.WebServer40.exe已停止工作”的错误
  9. CentOS 6.5系统使用yum方式安装LAMP环境和phpMyAdmin详细过程
  10. HW5.33
  11. ASP.NET MVC 5入门小结
  12. ALV列、行、单元格颜色设置
  13. 在tornado中使用celery实现异步任务处理之中的一个
  14. JavaScript window.setTimeout() 的详细用法
  15. Pandas分组
  16. 查找-&gt;动态查找表-&gt;二叉排序树
  17. ubuntu系统中添加DNS服务器地址后诡异消失的解决办法
  18. 20155308『网络对抗技术』Exp7:网络欺诈防范
  19. 【word2vec】Distributed Representation——词向量
  20. java 面向对象 — 类和对象

热门文章

  1. 更改pip源
  2. jmeter之jtl文件解析
  3. 利用java实现抽奖转盘(着重安全控制)
  4. ASP.NET用户控件操作ASPX页面
  5. [Q]安装问题(找不到InstallUtilLib.dll)
  6. iOS 调用私有函数安装app 卸载 app
  7. C# DataRow[]转换DataTable
  8. MSMQ小Demo
  9. js 常用插件
  10. Petya and Spiders【二进制状压】