11492人加入学习
(20人评价)
C#编程-第二季-面向对象-宇宙最简单2021最新版

制作完成于2021-10月20日 使用VS2019

价格 免费

抽象类虚拟类的关系和密封类

虚拟方法和抽象方法都可以供派生类重写和都用override重写。那么它们之间有什么区别呢?
1.抽象方法使用abstract关键字,虚拟方法使用virtual关键字

2.抽象方法是可以看成是没有实现体的虚拟方法

3.虚拟方法与多态性关系密切,虚拟方法为子类提供了重写该方法的选项允许子类完全或部分重写该类的方法,必须写方法体。

4.抽象方法只是一个定义,没有提供实现部分,也就是没有{},也不要在里面写内容,需要在子类中实现,抽象方法是一种强制子类重写的方法,否则子类将不能被实例化。

5.抽象方法必须在派生类中重写,这一点跟接口类似,虚拟方法不必。

6.抽象方法不能声明方法体,而虚拟方法可以。

7.抽象类不能被实例化(不可以new),只能实例化实现了全部抽象方法的派生类;而包含虚方法的类可以实例化。

8.虚拟方法是指能被重载覆盖的方法,而抽象方法是虚拟方法中的特例,指完全没有具体实现的虚拟方法.

9.如果类中包含抽象方法,那么类就必须定义为抽象类,不论是否还包含其它一般方法

10.抽象方法是必须被派生类覆写的方法,调用虚拟方法,运行时将确定调用对象是什么类的实例,并调用适当的覆写的方法

11.一个虚拟方法的实现可以由派生类取代。取代所继承的虚拟方法的实现的过程称为重写该方法;在一个虚拟方法调用中,该调用所涉及的那个实例的运行时类型确定了要被调用的究竟是该方法的哪一个实现。

12.抽象方法是需要子类去实现的.虚方法,是已经实现了,子类可以去覆盖,也可以不覆盖取决于需求.
————————————————
                        
原文链接:https://blog.csdn.net/XVJINHUA954/article/details/106791595

密封类(sealed)

写法:sealed class 类名   方法名写到权限修饰符后即可

对于类,表示不能继承该类

对于方法,表示不能重写该方法

[展开全文]

1.abstract抽象类

2.抽象函数,只有定义的方法,没有方法体

3.类前边加abstract就是抽象类

4.定义抽象类的方法

   在抽象类中,定义抽象方法,只需要在返回值类型面前+abstract即可,没有方法体

5.抽象类不能实例化一个对象

6.抽象类可以利用子类构造

7.抽象类利用子类重写方法时,在返回值类型前加override

8.sealed密封类

9.密封类是不能被继承的

10.如何声明密封方法?

    需要重写后才能密封,sealed o'v

[展开全文]

抽象类

C#允许把类和函数声明为 abstract抽象类          抽象类不能实例化,抽象类可以包含普通函数和抽象函数,(什么是抽象函数)抽象函数就是只有函数定义没有函数体。抽象函数本身也是虚拟的Virtual( 只有函数定义,没有函数体实现)

 

类是一个模板,抽象类就是一个不完整的模板,不能使用部位完整的模板去构造对象

 

( 为什么把某个类定义成抽象类呢 )                    因为我们知道这个类是不能构造对象的,我们把这个类我们把这个类声明称抽象类,其他人使用抽象类创建对象的时候语法就会不通过  为了防止别人误操作,所以我们就把他声明成抽象的

[展开全文]

不完整的模板 称为抽象类

 

[展开全文]

using System;

using System.Collections.Generic;

using System.Text;

 

namespace _09_抽象类

{

    public abstract class Enemy

    {

        private int hp;

        private int speed;

 

        public void Move()

        {

            Console.WriteLine("Move");

        }

        public abstract void Attack();

 

    }

}

[展开全文]

抽象类://abstract
抽象类只有函数定义没有函数体,抽象类是一个不完整的类。

abstract class 类名
{
   pritave int Z;  //这是一个正常的字段成员
   public void 类名()
   {
       Console.WriteLine("这是一个正常函数");
   }
   public abstract void 类名();
}

抽象类内可以包含正常的字段成员及函数成员,但抽象函数必须在抽象类里,抽象类为父类,用于子类必须有用此类包含的抽象方法,供子类编辑。

语法规定,只能声明抽象类,但不能使用抽象类直接构造对象。因为不能使用一个不完整的类构造对象。但我们可以使用它的子类构造对象。

实现抽象类:
光标移动到报错上等待错误提示可以快捷操作"实现抽象类"
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
密封类和密封方法:  //sealed
密封类:
sealed class 类名
{
   此时类为密封类,不可被其它类继承。
}
 

密封方法:
class 派生类
{
   public sealed override 函数名
   {
     此时函数不可以被重写,但仍可被继承
   }
}

 

作用:防止重写某些类导致代码混乱。

作用:商业原因。 

[展开全文]

抽象类 acstract

密封类 sealed

 

[展开全文]

抽象函数只有函数定义没有函数体,不能实例化

可以包含普通的函数等

抽象函数本身是virtual

 

sealed:密封类不能被继承,密封函数不能被重写

 

[展开全文]

抽象类

如果父类的函数在各个子类中都不要设置不同的函数体,在父类中定义就没必要了,就可以设置只有函数名,没有函数体,声明成抽象函数

1.抽象类的设置(非抽象类里面不能含有抽象函数)

abstract class Enemy

2.抽象函数 的设置

public abstract void Attack();

3.抽象类是不能构造对象的,例如

Enemy ey=new Enemy();

只能声明Enemy ey;但new Enemy() 使用抽象类的模板是错误的

处理办法:在当前行的左边点击实现抽象类

将函数体修改 

抽象函数和虚方法的区别:

抽象函数是让父类只需要声明函数,而子类负责设置

在抽象类里abstract  class Enemy{

public abstract void Attack()

{。。。} }

在子类里面 class Boss : Enemy
    {
        public override void Attack()}

虚方法是在子类里重写函数

public virtual void Move()

在boss类中

(输入override会有提示)

public override void Move()

{

base.Move();//和父类相同

}

密封类  sealed

作用:1.防止重写某些类,导致代码混乱

            2.商业原因

类不能继承,方法不能重写 

在父类用virtual虚方法

普通类+virtual方法

在子类重写方法

继承类+override方法+sealed(该方法不可以再次被重写)

 

 

 

 

[展开全文]

抽象类使用 abstract 关键字进行修饰。 与java相同。

 

抽象类不能被实例化。可以包含普通函数和抽象函数。

 

类继承抽象类 必须实现抽象类中所有的抽象方法。

 

密封类和密封方法 使用sealed关键字进行修饰。 

密封类不能被继承。 密封方法不能被重写。

 

如果方法要定义为密封方法时, 必须是重写之后的方法。

[展开全文]

普通类里是不能包括抽象方法的

抽象方法只能包含在抽象类里,抽象类可以没有抽象方法。

.密封类   se

 

[展开全文]

1.抽象方法只能包含在抽象类中

abstract class Enemy

{

    public abstract void Attack();

}

2.抽象类不能构造对象,可以声明

 

密封类和方法:sealed

不能继承该类;方法不能重写;

作用:

1.防止重写某些类导致代码混乱

2.商业原因

[展开全文]

授课教师

SiKi学院老师

课程特色

下载资料(1)
视频(60)