18.密封类

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

×

喜欢就点赞,疼爱就打赏