1.继承:

****

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

Student,Teacher,Driver ----子类  派生类

Person                          ----父类  基类

子类继承于父类:

****

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

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

问题:子类有没有继承父类的构造函数?

答:子类并没有继承父类的构造函数,但是,子类会默认的调用父类无参数的构造函数,创建父类对象,让子类可以使用父类中的成员。

所以,如果在父类中重新写了一个有参数的构造函数之后,那个无参数的就被干掉了,子类就调用不到了,所以子类会报错。

解决方法:

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

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

2.继承的特性:

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

2)继承的传递性:祖宗的迟早是我的!

3.查看类图

例子代码:

Person类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace ConsoleApplication3
{
public class Person
{
public Person(string name,int age,char gender)
{
this.Name = name;
this.Age = age;
this.Gender = gender;
} private string _name; public string Name
{
get { return _name; }
set { _name = value; }
}
private int _age; public int Age
{
get { return _age; }
set { _age = value; }
}
private char _gender; public char Gender
{
get { return _gender; }
set { _gender = value; }
} public void CHLSS()
{
Console.WriteLine("吃喝拉撒睡!");
} }
}

Student类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace ConsoleApplication3
{
public class Student : Person
{
public Student(string name, int age, char gender, int id)
: base(name, age, gender)
{
this.Id = id;
} private int _id; public int Id
{
get { return _id; }
set { _id = value; }
} public void Study()
{
Console.WriteLine("Study!");
}
}
}

Teacher类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace ConsoleApplication3
{
public class Teacher : Person
{
public Teacher(string name, int age, char gender, decimal salary)
: base(name, age, gender)
{
this.Salary = salary;
} private decimal _salary; public decimal Salary
{
get { return _salary; }
set { _salary = value; }
} public void Teach()
{
Console.WriteLine("Teach!");
}
}
}

Driver类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace ConsoleApplication3
{
public class Driver : Student
{
public Driver(string name, int age, char gender, int id, int drivertime)
: base(name, age, gender, id)
{
this.DriverTime = drivertime;
} private int _driverTime; public int DriverTime
{
get { return _driverTime; }
set { _driverTime = value; }
} public void Drive()
{
Console.WriteLine("Drive!");
}
}
}

4.object是所有类的基类。

5.new 关键字

1)创建对象

2)隐藏从父类中继承的同名成员。隐藏的后果就是子类无法调用父类的成员。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace ConsoleApplication3
{
public class Person
{
public Person(string name,int age,char gender)
{
this.Name = name;
this.Age = age;
this.Gender = gender;
} private string _name; public string Name
{
get { return _name; }
set { _name = value; }
}
private int _age; public int Age
{
get { return _age; }
set { _age = value; }
}
private char _gender; public char Gender
{
get { return _gender; }
set { _gender = value; }
} public void CHLSS()
{
Console.WriteLine("吃喝拉撒睡!");
} /// <summary>
/// 测试SayHello方法
/// </summary>
public void SayHello()
{
Console.WriteLine("Hello!");
} }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace ConsoleApplication3
{
public class Student : Person
{
public Student(string name, int age, char gender, int id)
: base(name, age, gender)
{
this.Id = id;
} private int _id; public int Id
{
get { return _id; }
set { _id = value; }
} public void Study()
{
Console.WriteLine("Study!");
} /// <summary>
/// new 关键字隐藏父类中的方法SayHello
/// </summary>
public new void SayHello()
{
Console.WriteLine("Hello,Student!");
}
}
}

6.MindeMap

C#面向对象10 继承的更多相关文章

  1. C++ Primer 学习笔记_69_面向对象编程 --继承情况下的类作用域

    面向对象编程 --继承情况下的类作用域 引言: 在继承情况下,派生类的作用域嵌套在基类作用域中:假设不能在派生类作用域中确定名字,就在外围基类作用域中查找该名字的定义. 正是这样的类作用域的层次嵌套使 ...

  2. 【Java基础】【08面向对象_继承&方法&final】

    08.01_面向对象(代码块的概述和分类)(了解)(面试的时候会问,开发不用或者很少用) A:代码块概述 在Java中,使用{}括起来的代码被称为代码块. B:代码块分类 根据其位置和声明的不同,可以 ...

  3. python面向对象编程 继承 组合 接口和抽象类

    1.类是用来描述某一类的事物,类的对象就是这一类事物中的一个个体.是事物就要有属性,属性分为 1:数据属性:就是变量 2:函数属性:就是函数,在面向对象里通常称为方法 注意:类和对象均用点来访问自己的 ...

  4. scala 面向对象之 继承

    scala 面向对象之 继承 scala   1.extends Scala中,让子类继承父类,与Java一样,也是使用extends关键字 继承就代表,子类可以从父类继承父类的field和metho ...

  5. [面向对象之继承应用(在子类派生重用父类功能(super),继承实现原理(继承顺序、菱形问题、继承原理、Mixins机制),组合]

    [面向对象之继承应用(在子类派生重用父类功能(super),继承实现原理(继承顺序.菱形问题.继承原理.Mixins机制),组合] 继承应用 类与类之间的继承指的是什么'是'什么的关系(比如人类,猪类 ...

  6. 黑马程序员_Java面向对象2_继承

    4.面向对象_继承 4.1继承的概述 提高了代码的复用性. 让类与类之间产生了关系,有了这个关系,才有多态的特性. 注意:千万不要为了获取其他类的功能而去继承,简化代码而继承.必须是类与类之间有所属关 ...

  7. php面向对象 封装继承多态 接口、重载、抽象类、最终类总结

    1.面向对象 封装继承多态  接口.重载.抽象类.最终类 面向对象 封装继承多态  首先,在解释面向对象之前先解释下什么是面向对象? [面向对象]1.什么是类? 具有相同属性(特征)和方法(行为)的一 ...

  8. 面向对象多继承(c3算法)、网络基础和编写网络相关的程序

    一.面向对象多继承(c3算法) a.有多个父类先找左,再找右,如下示例: class A(object): pass class B(object): def f1(self): print('B') ...

  9. Python 面向对象编程 继承 和多态

    Python 面向对象编程 继承 和多态 一:多继承性 对于java我们熟悉的是一个类只能继承一个父类:但是对于C++ 一个子类可以有多个父亲,同样对于 Python一个类也可以有多个父亲 格式: c ...

随机推荐

  1. iOS (APP)进程间8中常用通信方式总结

    1 URL Scheme 2 Keychain 3 UIPasteboard 4 UIDocumentInteractionController 5 local socket 6 AirDrop 7 ...

  2. div设置百分比高度 宽度

    给div按百分比设置高度 宽度两种方法: 第一种是给body标签设置他的高度值,xxxpx,div就会根据body的像素值取百分比: 第二种方法就是在div属性中加入 position:absolut ...

  3. appium中从activity切换到html

    问题:混合开发的app中,会有内嵌的H5页面元素,该如何进行定位操作? 解决思路:appium中的元素定位都是基于android原生控件进行元素定位,而web网页是B/S架构,两者运行环境不同需要进行 ...

  4. QT Embedded二三事之QObject的元对象

    一.元对象  元对象被称做是meta object.在运行时刻(runtime),能够提供对象的运行时信息.        在C++语言发展的早期,C++语言本身没有定义对象的运行时信息,如输出类的名 ...

  5. Python 文件writelines() 方法和处理双层列表

    概述 writelines() 方法用于向文件中写入一序列的字符串. 这一序列字符串可以是由迭代对象产生的,如一个字符串列表. 换行需要制定换行符 \n. 语法 writelines() 方法语法如下 ...

  6. babel 实践

    一.@babel/core var babel = require("@babel/core");babel.transform(code, options, function(e ...

  7. nginx.conf 配置 (反向代理,负载均衡,fastdfs model)

    #user nobody;worker_processes 1; #error_log logs/error.log;#error_log logs/error.log notice;#error_l ...

  8. Java泛型(3):泛型方法

    泛型还可以同样运用在方法.是否拥有泛型方法与其所在的类是否是泛型类没有关系. 无论何时,只要你能做到,都应该尽量使用泛型方法,如果泛型方法可以取代将整个类整个类泛型化,那么就应该只使用泛型方法. 下面 ...

  9. centos6.8(虚拟机VNC)输入正确用户名和密码仍跳回登录界面

    1)CentOS自动更新到6.8后root无法登陆问题解决 虚拟机CentOS服务器不知道被谁更新系统到6.8后,发现在本机上即使输入正确的密码也无法登陆,发现有一些人也碰见过同样的问题,但是他们是因 ...

  10. python之selenium三种等待方法

    前提: 我们在做Web自动化时,有的时候要等待元素加载出来,才能操作,不然会报错 1.强制等待 2.隐式等待 3.显示等待 内容: 一,强制等待 这个比较简单,就是利用time模块的sleep的方法来 ...