博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
继承和多态的那些事
阅读量:6694 次
发布时间:2019-06-25

本文共 3449 字,大约阅读时间需要 11 分钟。

1.使用new实例化对象时,调用了   构造函数

2.方法重载有哪些特点

解析:在同一个类中,方法名相同该参数里列表不同,和返回值类无关!

3.以下位于同一类中的两个方法是否属于方法重载?为什么?

public string Method1(string name){}

public void Method1(string address){}

解析:不可以,这两个方法就是同一个方法,在同一个类中无法共存。

4.子类中调用父类成员的关键字是什么?

解析:base

5.重写父类方法使用什么关键字?

解析:override

6.继承有哪些特性?

解析:单根性

         传递性

7.父类的哪些成员可以被继承?

解析:私有成员不能被继承,父类的构造

8.继承:在C#中,如果一个类后面通过冒号又跟了另外一个类,那么我们就称冒号前面的类

为子类,冒号后面的类为父类。这种书写类的方式放映出来的关系就称为类的继承关系。

子类:派生类

父类:基类或者超类

9.满足什么条件的类可以使用继承??

解析:满足is a关系的两个类可以使用继承

10.如果new一个子类对象,那么有如下执行流程

   01.先定位到子类对应构造函数,没有执行子类的方法体

   02.转向了父类的无参构造函数,执行父类构造方法体

   03.转向了子类的方法体继续执行。

点题的话:如果在子类构造中,没有使用base显示调用父类的构造,那么系统也会自动调用父类的无参构造

    //01.base代表父类对象,如果base():调用父类的构造函数

    //02.base代表的是方法调用,是不需要参数类型的

11.通过base调用父类构造函数注意点

解析:01.通过base调用父类构造函数只能书写在子类的构造后

     02.通过base调用父类构造函数参数顺序和父类的构造参数一致

12.访问修饰符(protected)

  public(可以访问  方法 ,成员变量,类):在任何位置都可以访问,甚至是跨程序集都可以访问。

  private(方法,成员变量):只能当前类的花括号{}中访问。

  internal(可以访问  方法 ,成员变量,类):只能在当前程序中使用(访问)

  protected受保护的(变量,方法):只能在当前类,当前类的子类,子类的子类(孙子类)中可以访问

                                                             public 、private和protected的区别

修饰符 类内部 子类 其他类
public 可以 可以 可以
protected 可以 可以 不可以
private 可以 不可以 不可以

 

★:继承模式下子类构造 背后到底发生了什么???     

解析:如果我们想构建          一个子类对象,   

1.进入子类构造方法名,但是不进子类构造的方法体   

2.跳转到父类构造方法名,接下来执行父类构造的方法体   

3.父类方法体执行完毕,转到子类的方法体执行   

4.子类方法体执行完毕,跳转到Main函数,代表子类对象创建工程。

   结论:只要你敢创建子类对象,呵呵,那么在后台一定有一个父类对象已经自动    生成!!!!!!

13.继承的传递性

如果一个类B继承自类A,而类C又继承类B,那么类C也可以访问到类A中非私有成员

14.继承的单根性 (C#不支持多继承 Java也不支持多继承)

在很久很久以前,有一个叫C++的家伙,他是支持多继承的语言,突然有一天,10个程序员用多继承,有9个都用错了,后续的Java和C#语言因此不再支持多继承。

在C#中,一个类只能有一个父类,C#和Java都不支持多继承。要想使用多继承,那么请您使用接口。。

15.遍历窗体上所有的控件,判断是不是文本框

foreach(Control c in this.Controls)

{

    if(c is TextBox)

      {

        ((TextBox)c).Text="";

      }

}

is a 判断一个对象是否是某个类型。

16.多态

    不同的对象对于同一个操作,做出的响应不同,那么这种情况在面向对象编程中就称为多态

 

在父类中定义的方法

语法:

访问修饰符  virtual 返回值 方法名()

{

     //方法体

}

public virtual string SayHi()

{

//省略方法体

}

像这样使用vitrual关键字修饰的方法,称为虚方法.虚方法有方法体.

 

在子类中定义的方法

 

访问修饰符  override 返回值 方法名()

{

     //方法体

}

public override string SayHi()

{

     //方法体

}

 

17.实现多态三种方式:

方式一:通过虚方法实现多态

实现多态的步骤

   01.在父类中通过virtual关键字定义一个虚方法

   02.在子类中通过override关键字对父类中的虚方法进行重写

   03.调用的时候,调用的是子类的方法

   第一种:虚方法实现多态

通过在普通类Person中用Virtual关键字定义虚方法SayHello(),然后在子类Student中通过override关键字对父类的SayHello()方法进行重写。

 

 

一个普通类

namespace Person{    public class Person    {        //通过virtual关键字标识该方法是虚方法,可以被子类重写        public virtual void SayHello()        {            Console.WriteLine("向你问好!");        }    }}

Student继承Person

namespace Person{    public class Student:Person    {        //在子类中通过override关键字对父类的虚方法进行重写        public override void SayHello()        {            Console.WriteLine("我是学生打招呼方法");        }    }}

 

在Main()方法中调用

namespace Person{    class Program    {        static void Main(string[] args)        {            List
list = new List
(); //第一种添加方式, Student stu = new Student(); Teacher teacher = new Teacher(); list.Add(stu); list.Add(teacher); //遍历集合中的元素,调用对应子类的SayHello方法 foreach (Person item in list ) { //方式一:直接调用item.SayHello() //item.SayHello(); //方式二:通过is as 判断转变后再调用 if (item is Student) { Student S = item as Student; S.SayHello(); } if (item is Teacher ) { Teacher T = new Teacher(); T.SayHello(); } } Console.ReadLine(); } }}

 

 

 

 

 

转载于:https://www.cnblogs.com/WuXuanKun/p/5374734.html

你可能感兴趣的文章
spring cloud 整合zpkin问题
查看>>
Maven下载慢的解决方案
查看>>
我的友情链接
查看>>
Android 核心分析 之七------Service深入分析
查看>>
Regsvr32使用方法
查看>>
柱形图Demo
查看>>
编辑器
查看>>
关闭windows的默认共享
查看>>
react开发环境搭建
查看>>
数据库读写分离
查看>>
社交是微信营销
查看>>
2008 R2 证书服务器应用详解
查看>>
hive 动态分区太多问题
查看>>
Windows Server 2008 RemoteApp(二)---部署激活远程桌面授权服务器
查看>>
读取日志文件开发总结
查看>>
IOS --React Native
查看>>
Linux CPU
查看>>
Linux/Centos ntp时间同步,联网情况和无网情况配置
查看>>
初级网络运维工程师比赛题目
查看>>
跨交换机实现vlan实验报告
查看>>