C#面向对象10 继承
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 继承的更多相关文章
- C++ Primer 学习笔记_69_面向对象编程 --继承情况下的类作用域
面向对象编程 --继承情况下的类作用域 引言: 在继承情况下,派生类的作用域嵌套在基类作用域中:假设不能在派生类作用域中确定名字,就在外围基类作用域中查找该名字的定义. 正是这样的类作用域的层次嵌套使 ...
- 【Java基础】【08面向对象_继承&方法&final】
08.01_面向对象(代码块的概述和分类)(了解)(面试的时候会问,开发不用或者很少用) A:代码块概述 在Java中,使用{}括起来的代码被称为代码块. B:代码块分类 根据其位置和声明的不同,可以 ...
- python面向对象编程 继承 组合 接口和抽象类
1.类是用来描述某一类的事物,类的对象就是这一类事物中的一个个体.是事物就要有属性,属性分为 1:数据属性:就是变量 2:函数属性:就是函数,在面向对象里通常称为方法 注意:类和对象均用点来访问自己的 ...
- scala 面向对象之 继承
scala 面向对象之 继承 scala 1.extends Scala中,让子类继承父类,与Java一样,也是使用extends关键字 继承就代表,子类可以从父类继承父类的field和metho ...
- [面向对象之继承应用(在子类派生重用父类功能(super),继承实现原理(继承顺序、菱形问题、继承原理、Mixins机制),组合]
[面向对象之继承应用(在子类派生重用父类功能(super),继承实现原理(继承顺序.菱形问题.继承原理.Mixins机制),组合] 继承应用 类与类之间的继承指的是什么'是'什么的关系(比如人类,猪类 ...
- 黑马程序员_Java面向对象2_继承
4.面向对象_继承 4.1继承的概述 提高了代码的复用性. 让类与类之间产生了关系,有了这个关系,才有多态的特性. 注意:千万不要为了获取其他类的功能而去继承,简化代码而继承.必须是类与类之间有所属关 ...
- php面向对象 封装继承多态 接口、重载、抽象类、最终类总结
1.面向对象 封装继承多态 接口.重载.抽象类.最终类 面向对象 封装继承多态 首先,在解释面向对象之前先解释下什么是面向对象? [面向对象]1.什么是类? 具有相同属性(特征)和方法(行为)的一 ...
- 面向对象多继承(c3算法)、网络基础和编写网络相关的程序
一.面向对象多继承(c3算法) a.有多个父类先找左,再找右,如下示例: class A(object): pass class B(object): def f1(self): print('B') ...
- Python 面向对象编程 继承 和多态
Python 面向对象编程 继承 和多态 一:多继承性 对于java我们熟悉的是一个类只能继承一个父类:但是对于C++ 一个子类可以有多个父亲,同样对于 Python一个类也可以有多个父亲 格式: c ...
随机推荐
- iOS (APP)进程间8中常用通信方式总结
1 URL Scheme 2 Keychain 3 UIPasteboard 4 UIDocumentInteractionController 5 local socket 6 AirDrop 7 ...
- div设置百分比高度 宽度
给div按百分比设置高度 宽度两种方法: 第一种是给body标签设置他的高度值,xxxpx,div就会根据body的像素值取百分比: 第二种方法就是在div属性中加入 position:absolut ...
- appium中从activity切换到html
问题:混合开发的app中,会有内嵌的H5页面元素,该如何进行定位操作? 解决思路:appium中的元素定位都是基于android原生控件进行元素定位,而web网页是B/S架构,两者运行环境不同需要进行 ...
- QT Embedded二三事之QObject的元对象
一.元对象 元对象被称做是meta object.在运行时刻(runtime),能够提供对象的运行时信息. 在C++语言发展的早期,C++语言本身没有定义对象的运行时信息,如输出类的名 ...
- Python 文件writelines() 方法和处理双层列表
概述 writelines() 方法用于向文件中写入一序列的字符串. 这一序列字符串可以是由迭代对象产生的,如一个字符串列表. 换行需要制定换行符 \n. 语法 writelines() 方法语法如下 ...
- babel 实践
一.@babel/core var babel = require("@babel/core");babel.transform(code, options, function(e ...
- nginx.conf 配置 (反向代理,负载均衡,fastdfs model)
#user nobody;worker_processes 1; #error_log logs/error.log;#error_log logs/error.log notice;#error_l ...
- Java泛型(3):泛型方法
泛型还可以同样运用在方法.是否拥有泛型方法与其所在的类是否是泛型类没有关系. 无论何时,只要你能做到,都应该尽量使用泛型方法,如果泛型方法可以取代将整个类整个类泛型化,那么就应该只使用泛型方法. 下面 ...
- centos6.8(虚拟机VNC)输入正确用户名和密码仍跳回登录界面
1)CentOS自动更新到6.8后root无法登陆问题解决 虚拟机CentOS服务器不知道被谁更新系统到6.8后,发现在本机上即使输入正确的密码也无法登陆,发现有一些人也碰见过同样的问题,但是他们是因 ...
- python之selenium三种等待方法
前提: 我们在做Web自动化时,有的时候要等待元素加载出来,才能操作,不然会报错 1.强制等待 2.隐式等待 3.显示等待 内容: 一,强制等待 这个比较简单,就是利用time模块的sleep的方法来 ...