面向对象基础知识(二)-类的继承

原创 2007年09月26日 16:47:00
 
一、静态类和静态类成员

 

静态类和类成员用于创建无需创建类的实例就能够访问的数据和函数。静态类成员可用于分离独立于任何对象标识的数据和行为:无论对象发生什么更改,这些数据和函数都不会随之变化。当类中没有依赖对象标识的数据或行为时,就可以使用静态类。

静态类静态类

类可以声明为

使用静态类来包含不与特定对象关联的方法。例如,创建一组不操作实例数据并且不与代码中的特定对象关联的方法是很常见的要求。您应该使用静态类来包含那些方法。

静态类的主要功能如下:

  • 它们仅包含静态成员。

  • 它们不能被实例化。

  • 它们是密封的。

  • 它们不能包含实例构造函数(C# 编程指南)。

因此创建静态类与创建仅包含静态成员和私有构造函数的类大致一样。私有构造函数阻止类被实例化。

使用静态类的优点在于,编译器能够执行检查以确保不致偶然地添加实例成员。编译器将保证不会创建此类的实利。

静态类是密封的,因此不可被继承。静态类不能包含构造函数,但仍可声明静态构造函数以分配初始值或设置某个静态状态。

二、抽象类、密封类及类成员

1、抽象类

使用 abstract 关键字可以创建仅用于继承用途的类和成员,即定义派生的非抽象类的功能。使用 sealed 关键字可以防止继承以前标记为 virtual 的类或某些类成员。

抽象类不能实例化。抽象类的用途是提供多个派生类可共享的基类的公共定义。例如,类库可以定义一个作为其多个函数的参数的抽象类,并要求程序员使用该库通过创建派生类来提供自己的类实现。

抽象类也可以定义抽象方法。方法是将关键字 abstract 添加到方法的返回类型的前面。例如:

public abstract class A
{
    
public abstract void DoWork(int i);
}

抽象方法没有实现,所以方法定义后面是分号,而不是常规的方法块。抽象类的派生类必须实现所有抽象方法。当抽象类从基类继承虚方法时,抽象类可以使用抽象方法重写该虚方法。例如:

 

// compile with: /target:library
public class D
{
    
public virtual void DoWork(int i)
    
{
        
// Original implementation.
    }

}


public abstract class E : D
{
    
public abstract override void DoWork(int i);
}


public class F : E
{
    
public override void DoWork(int i)
    
{
        
// New implementation.
    }

}

 

如果将虚方法声明为抽象方法,则它对于从抽象类继承的所有类而言仍然是虚的。继承抽象方法的类无法访问该方法的原始实现。在前面的示例中,类 F 上的 DoWork 无法调用类 D 上的 DoWork。在此情况下,抽象类可以强制派生类为虚方法提供新的方法实现。

2、密封类和类成员

可以将类声明为密封类。方法是在类定义中将关键字 sealed 置于关键字 class 的前面。例如:

public sealed class D
{
    
// Class members here.
}

密封类不能用作基类。因此,它也不能是抽象类。密封类主要用于防止派生。由于密封类从不用作基类,所以有些运行时优化可以使对密封类成员的调用略快。

在对基类的虚成员进行重写的派生类上的类成员、方法、字段、属性或事件可以将该成员声明为密封成员。在用于以后的派生类时,这将取消成员的虚效果。方法是在类成员声明中将 sealed 关键字置于 override 关键字的前面。例如:

public class D : C
{
    
public sealed override void DoWork() { }
}

static 的,以指示它仅包含静态成员。不能使用 new 关键字创建静态类的实例。静态类在加载包含该类的程序或命名空间时由 .NET Framework 公共语言运行库 (CLR) 自动加载。
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

面向对象基础知识(5)- 封装 继承 多态

封装 继承 多态 这三个是面向对象的基本特征、有了这三个特征的编程语言、才是面向对象编程语言、如C# 封装: 特性      1 每个对象包含他操作的所有信息      2不必依赖其他对象来完成某些...

【java基础知识】面向对象三大特性之继承

1.复用类(1)组合:把一个类当做对象放到另一个类里面去使用 (2)继承:基于已存在的类构造一个新类。 *已存在的类称为父类、基类或超类; *新类称为子类、派生类、或孩子类。 (3)继承与组合...

黑马程序员——Java基础知识——面向对象(二)

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! 继承、抽象类、接口   -----------...

Java 基础知识(二)之面向对象技术

1.    面向对象与面向过程的区别        面向对象把数据及对数据的操作方法放在一起,作为一个互相依存的整体,即对象。对同类对象抽象出其共性,即类,类中的大多数数据,只能被本类的方法进行处理。...

黑马程序员--java基础知识之面向对象(二)

java基础知识之面向对象(二)

C/C++基础知识03---面向对象---类(Classes)

类(Classes)类(class)是一种将数据和函数组织在同一个结构里的逻辑方法。定义类的关键字为class ,其功能与C语言中的struct类似,不同之处是class可以包含函数,而不像struc...

--面向对象第二部分-内部类、异常--java学习日记6(基础知识)

面向对象是一种思想,它将事物抽象,封装,

黑马程序员-Java基础知识4,(部分笔记总结面向对象-类)

1类 1)是同类型东西的概念,是对现实生活中事物的描述,映射到Java中描述就是class定义的类。类是对象的模板、图纸,是对象的数据结构定义。简单说就是“名词”。 2)其实定义类,就是在描述事物...

C++面向对象基础知识详解二

C++面向对象基础知识详解二

黑马程序员---java基础知识之面向对象(二)

java基础知识之面向对象(三)
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)