每日一测5(关于继承)

继承、封装和多态是面向对象编程的重要特性。
其成员被继承的类叫基类(或父类),继承其成员的类叫派生类(或子类)。

1、子类隐式获得父类的除构造函数和析构函数以外的所有成员(包括私有和非私有)。

2、继承的单一性:c#不支持多重继承,子类只能有一个直接父类,但一个父类可以同时拥有多个子类。

3、继承的传递性:即 B继承自A,C又继承自B,那么C一般拥有A类所有的成员。

4、子类创建的时候会默认调用父类的无参构造函数,如果父类不存在无参构造函数则报错。 如需要调用指定的父类构造函数,用base关键字(每日一测2里有例子)。

5、当子类和父类有同名方法时, 子类的方法会覆盖父类的方法吗?

    class Person
    {
        public void song()
        {
            Console.WriteLine("我是父类的方法");
        }
    }

    class Chinese:Person
    {
        public void song()  //编译器会提示隐藏, 在void前面用new修饰即可
        {
            Console.WriteLine("我是子类的方法");
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Person p = new Chinese(); //父类变量指向子类对象
            p.song();

            Chinese cp = new Chinese();
            cp.song();
            Console.ReadKey();
        }
    }

运行结果为: 

当父类的song方法用virtual修饰, 子类的song用override修饰的时候,运行结果2个均为我是子类的方法

时间: 2024-11-05 06:21:06

每日一测5(关于继承)的相关文章

每日一测3(结构和类的异同)

1.  类(class)是引用类型,在堆(heap)上分配地址 结构(struct)是值类型,在堆栈(stack)上分配地址(关于堆栈的运行速度执行优劣等这里就不详细说了,简单的可以理解成堆是硬盘,容量大,执行效率相对低,栈是内存,容量小,执行效率高.仅仅只是通过这样来方便理解) 2.  类有默认的构造函数,有析构函数,可以使用abstract ,sealed,protected修饰,可以直接初始化字段,必须使用new来创建 结构没有.结构可以添加构造函数,但在构造函数中必须为每个字段赋值. 结

每日一测2(关于构造函数)

1.一个类中可以有多个构造函数,包括无参的默认构造函数和有参的. 2.不加修饰符或显式的用private修饰的构造函数, 表示该类不能被实例化. 3.子类的构造函数,默认会调用父类的无参构造函数,如父类的无参构造函数不存在,会报错. 也可以显式的指定调用父类的哪个构造函数 1 class Person 2 { 3 public int test; 4 static Person() 5 { 6 Console.WriteLine("我是父类的静态构造函数"); 7 } 8 public

每日一测6(关于方法)

1.void修饰没有返回值 2.一个类下面可以有多个同名方法,只要方法签名不同即可(即参数类型不同) class Person { public void song() { Console.WriteLine("我是父类的方法"); } public string song() { Console.WriteLine("我是父类的方法1"); } }//编译器会报错 提示已经定义了一个名为song的具有相同参数类型的成员 class Person { public

每日一测4(装箱与拆箱)

1.定义 装箱:用于在垃圾回收堆中存储值类型.装箱是值类型到 object 类型或到此值类型所实现的任何接口类型的隐式转换. 拆箱:从 object 类型到值类型或从接口类型到实现该接口的值类型的显式转换. 2.为什么要装箱: (1)调用一个类型为Object的参数的方法,Object可支持任意为型,当你需要将一个值类型(如Int32)传入时,需要装箱. (2)一个非泛型的容器 ,同样是为了保证通用,而将元素类型定义为Object.同样的,要将值类型数据加入容器时,需要装箱. 3.操作: (1)

每日一测1(带命令行参数运行)

怎么让程序带参数运行以便适应不同的测试环境? 命令行参数在程序中的配置位置是在项目-属性-启动选项-命令行参数里 可以通过Main方法传入命令行参数(控制台程序本身就已带), 传入一个string类型的数组.也可以通过System.Environment这个类取出 static void Main(string[] args)  { for (int i = 0; i < args.Length; i++)      //取出来的直接是参数,没有路径 { Console.WriteLine(&quo

细说log4j

可能做过java项目的基本上都是用过log4j,它是用来做java日志的.比如我们做一个项目分为很多的模块,那我们怎么想要知道它什么时候启动了,这时候我们可以使用log4j标记某某模块启动了. 努力的人绝对不会成为落后的标兵,加油!废话不多说,进入log4j. 一.log4j简介 1.1.log4j概述 log for java(java日志) Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台.文件.GUI组件,甚至是套接口服务器.NT的事件记

从零开始学JAVA (一)

为什么要转行做软件开发?(为什么选择JAVA?) 小时候日以继夜玩FC的时候,就梦想长大以后能成为一个游戏开发者,谁知道长大以后却成了一个建筑行业的成本控制员.一个月前终于下决心辞去了那份还算不错的工作,毅然重铸那个软件开发工程师的梦想.Android是我很喜欢的一个平台,就让这个梦从java启航吧. JAVA的入门学习经历 其实早在还在做上一份工作的时候,就看过一些类似于<A byte of Python>之类的python入门书,但是擅长修电脑和拥有良好PC使用习惯的我,对软件的认识还往往

从Github开源项目《云阅》所学到的知识

感谢开源,感谢大神,才让我们这些菜鸟成长! 附上云阅开源项目地址:点我吧. 1.轮播图的实现. 现在的APP基本都会实现这个功能吧,然后一直都找不到好的第三方库,能够满足各种需求.然而碰到了这个开源库... gradle配置: implementation 'com.youth.banner:banner:1.4.9' github地址: https://github.com/youth5201314/banner 参考文章: Android-图片轮播(banner) 2.MVVM-DataBi

基于SCRUM方法实践的西油计科党建设计与实现

个人实践流程单 一.Alpha版本冲刺个人在SCRUM团队任务清单 任务阶段时间 我这个三天做了什么 实际解决燃尽图数量 我遇到了什么问题 我下一个三天要做什么 预计下三天完成燃尽图项目数量 一 利用phpstorm进行第一版本pc端系统管理,个人管理前端页面的开发,并与后端开发组整合 4 getlastsql()可显示正确的SQL语句,但中文存入数据表后为空字符串.这个是由于编码问题造成的,用getlastsql()可以看到正确的SQL输出,但是查看却发现是GBK编码,而数据表是UTF-8,因