18.面向对象-继承-密封类
18.1 知识点
密封类的基本概念
- 密封类是使用
sealed
密封关键字修饰的类 - 作用:让类无法再被继承
- 通俗解释:让类”结扎”
密封类的实例
//父类 加了 sealed 被结扎了
sealed class Father
{
// 父类的成员和方法
}
//子类报错 加了 sealed 的父类不能再子类被继承
//class Son : Father
//{
// 子类的成员和方法
//}
密封类的作用
- 在面向对象程序的设计中,密封类的主要作用是不允许最底层子类被继承
- 可以保证程序的规范性、安全性
- 目前对于大家来说可能用处不大
- 随着大家的成长,以后制作复杂系统或者程序框架时便能慢慢体会到密封的作用
总结
- 关键字:
sealed
- 作用:让类无法再被继承
- 意义:加强面向对象程序设计的规范性、结构性、安全性
18.2 知识点代码
using System;
namespace Lesson16_继承_密封类
{
#region 知识点一 密封类的基本概念
//密封类 是使用 sealed密封关键字修饰的类
//作用:让类无法再被继承
//通俗解释:让类结扎
#endregion
#region 知识点二 密封类的实例
//父类 加了sealed 被结扎了
sealed class Father
{
}
//子类报错 加了sealed的父类不能再子类被继承
//class Son :Father
//{
//}
#endregion
#region 知识点三 密封类的作用
//在面向对象程序的设计中,密封类的主要作用就是不允许最底层子类被继承
//可以保证程序的规范性、安全性
//目前对于大家来说 可能用处不大
//随着大家的成长,以后制作复杂系统或者程序框架时 便能慢慢体会到密封的作用
#endregion
//总结
// 关键字:sealed
// 作用:让类无法再被继承
// 意义: 加强面向对象程序设计的 规范性、结构性、安全性
class Program
{
static void Main(string[] args)
{
Console.WriteLine("密封类");
}
}
}
18.3 练习题
定义一个载具类,速度,最大速度,可乘人数,司机和乘客等,有上车,下车,行驶,车祸等方法,用载具类声明一个对象,并将若干人装载上车
class语句块外 namespace语句块内
// 人类
class Person
{
}
// 司机类,继承自Person
class Driver : Person
{
}
// 乘客类,继承自Person
class Passenger : Person
{
}
// 汽车类
class Car
{
// 速度
public int speed;
// 最大速度
public int maxSpeed;
// 汽车当前人数
public int personNumber;
// 人的数组,有司机和乘客
public Person[] persons;
// 传入速度,最大速度,汽车人数上限
public Car(int speed, int maxSpeed, int personNumberMax)
{
this.speed = speed;
this.maxSpeed = maxSpeed;
this.personNumber = 0;
persons = new Person[personNumberMax];
}
// 上车
public void GetOnCar(Person p)
{
// 判断是否超载
if (personNumber >= persons.Length)
{
Console.WriteLine("满载");
return;
}
// 上车逻辑
persons[personNumber] = p;
++personNumber;
}
// 下车
public void GetOffCar(Person p)
{
for (int i = 0; i < persons.Length; i++)
{
// 判断当前位置的乘客是否为空,为空的话说明都没人了,直接break就行
if (persons[i] == null)
{
break;
}
// 如果找到了对应的乘客
if (persons[i] == p)
{
// 后面的乘客依次往前移动位置
for (int j = i; j < personNumber - 1; j++)
{
persons[j] = persons[j + 1];
}
// 最后一个位置清空
persons[personNumber - 1] = null;
--personNumber;
break;
}
}
}
// 行驶
public void Move()
{
// 行驶逻辑
}
// 车祸
public void Boom()
{
// 车祸逻辑
}
}
主函数内
// 主函数内
Car car1 = new Car(10, 20, 20);
Driver driver1 = new Driver();
car1.GetOnCar(driver1);
Passenger passenger1 = new Passenger();
car1.GetOnCar(passenger1);
Passenger passenger2 = new Passenger();
car1.GetOnCar(passenger2);
Passenger passenger3 = new Passenger();
car1.GetOnCar(passenger3);
car1.GetOffCar(passenger2);
18.4 练习题代码
using System;
namespace Lesson16_练习题
{
//class语句块外 namespace语句块内
#region 练习题一
//定义一个载具类
//有速度,最大速度,可乘人数,司机和乘客等,有上车,下车,行驶,车祸等方法,
//用载具类声明一个对象,并将若干人装载上车
//人类
class Person
{
}
//司机类
class Driver:Person
{
}
//乘客类
class Passenger:Person
{
}
//汽车类
class Car
{
//速度
public int speed;
//最大速度
public int maxSpeed;
//汽车当前人数
public int personNumber;
//人的数组 有司机和乘客
public Person[] persons;
//传入速度,最大速度,汽车人数上限
public Car( int speed, int maxSpeed, int personNumberMax )
{
this.speed = speed;
this.maxSpeed = maxSpeed;
this.personNumber = 0;
persons = new Person[personNumberMax];
}
//上车
public void GetOnCar( Person p )
{
//判断是否超载
if( personNumber >= persons.Length )
{
Console.WriteLine("满载");
return;
}
//上车逻辑
persons[personNumber] = p;
++personNumber;
}
//下车
public void GetOffCar(Person p)
{
for (int i = 0; i < persons.Length; i++)
{
//判断当前位置的乘客是否为空 为空的话说明都没人了 直接break就行
if (persons[i] == null)
{
break;
}
//如果找到了对应的乘客
if( persons[i] == p )
{
//后面的乘客依次往前移动位置
for (int j = i; j < personNumber - 1; j++)
{
persons[j] = persons[j + 1];
}
//最后一个位置清空
persons[personNumber - 1] = null;
--personNumber;
break;
}
}
}
//行驶
public void Move()
{
}
//车祸
public void Boom()
{
}
}
#endregion
class Program
{
static void Main(string[] args)
{
Console.WriteLine("封装继承综合练习");
//主函数内
#region 练习题一
Car car1 = new Car(10, 20, 20);
Driver driver1 = new Driver();
car1.GetOnCar(driver1);
Passenger passenger1 = new Passenger();
car1.GetOnCar(passenger1);
Passenger passenger2 = new Passenger();
car1.GetOnCar(passenger2);
Passenger passenger3 = new Passenger();
car1.GetOnCar(passenger3);
car1.GetOffCar(passenger2);
#endregion
}
}
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com