内嵌类 局部类 抽象类
来源:互联网 发布:淘宝卖qq号码是真的吗 编辑:程序博客网 时间:2024/06/07 03:00
内嵌类
内嵌类有两种类型:内联(inner)类和静态内嵌(static nested)类。
主要的区别:
一、内联类可以访问定义在外围类(enclosing class)中的实例变量。静态内嵌类不可以。
二、内联类是完全封装在外围类中的。而静态内嵌类可以被外部代码使用,只要不是private的。如静态内嵌类Entry用来遍历Map对象中的key-value对。在Map之外的代码上下文,需要用Map.Entry来引用这个类。
因此,将内嵌类声明为静态的首要原因是,让其他类可以使用它。虽然可以将类声明为顶层类(top-level,也就是非内嵌类),但可能希望把他紧密地绑定在容器类中。例如Map.Entry被紧密地绑定到Map;因为如果缺少Map,Entry类就没有存在的意义。
第二个原因是,允许将其序列化。不能序列化内联类对象,因为他们能够访问外围类的实例变量。
如果你需要在class Tree或Class River成员函数之外访问Class Branch,你就应该象上面那样将嵌套类申明成Public。访问树叉时应该写成Tree::Branch,访问河叉则应写成River::Branch,此时,外层的类实际上起名称空间的作用,以区别树叉和河叉并非同一回事。
如果只在外层类的成员函数中访问嵌套类,则应该象下面这样申明成Private或Protected:
主要的区别:
一、内联类可以访问定义在外围类(enclosing class)中的实例变量。静态内嵌类不可以。
二、内联类是完全封装在外围类中的。而静态内嵌类可以被外部代码使用,只要不是private的。如静态内嵌类Entry用来遍历Map对象中的key-value对。在Map之外的代码上下文,需要用Map.Entry来引用这个类。
因此,将内嵌类声明为静态的首要原因是,让其他类可以使用它。虽然可以将类声明为顶层类(top-level,也就是非内嵌类),但可能希望把他紧密地绑定在容器类中。例如Map.Entry被紧密地绑定到Map;因为如果缺少Map,Entry类就没有存在的意义。
第二个原因是,允许将其序列化。不能序列化内联类对象,因为他们能够访问外围类的实例变量。
嵌套类的使用本质上应基于概念分级。比如我要定义一个Class Tree,另外我还要定义一个树叉类,Class Branch不是好的选择,因为它有二义性,可能是树叉,也可能是河叉,但Class Tree_Branch又显得啰嗦,好的选择是使用嵌套类:
class Tree { public: class Branch { ... }; }; class River { public: class Branch { ... }; };
如果你需要在class Tree或Class River成员函数之外访问Class Branch,你就应该象上面那样将嵌套类申明成Public。访问树叉时应该写成Tree::Branch,访问河叉则应写成River::Branch,此时,外层的类实际上起名称空间的作用,以区别树叉和河叉并非同一回事。
如果只在外层类的成员函数中访问嵌套类,则应该象下面这样申明成Private或Protected:
class Tree { private: class Branch { ... }; };
局部类
是在函数体内定义的类。
这个类以及由它创建的对象,都局限在该函数作用域中;
必须在类内实现所有的成员函数,不能拿到类外。因为函数是不可以嵌套定义的;
若类内含有静态数据成员,必须在该函数外初始化;
类内不可含有静态函数成员;
类中不可使用包裹它的函数所定义的除静态外的局部变量。
抽象类
作用
–抽象类为抽象的设计目的服务。将有关的数据和行为组织在一个类中,保证其继承层次结构的派生类具有要求的行为。
–对于暂时无法实现的函数,可以声明为纯虚函数,留给派生类去实现。
注意
–抽象类通常只作为基类来使用,不能作子类。
–不能定义抽象类的对象,不能作转换的目标类型。
–抽象类不能作函数的参数,也不能作返回值。
–构造函数不能是虚函数,析构函数可以是虚函数。
- 内嵌类 局部类 抽象类
- C++ 局部类、内嵌类和抽象类
- 局部类
- 局部类
- JAVA基础一大堆0801抽象类+内部类局部类+异常
- 基于OpenCV CxCore和Conjugate Gradient Method求函数局部极小值的抽象类
- 抽象类 抽象函数
- 抽象类、抽象方法
- 抽象类抽象方法
- 抽象类,抽象方法
- 抽象类,抽象方法
- 抽象方法,抽象类
- 抽象类、抽象方法
- 局部类怎么访问局部变量
- Java--类和接口--常规内部类,静态内部类,局部内部类,匿名内部类,抽象类,接口
- Java类和接口(常规内部类、静态内部类、局部内部类、匿名内部类、抽象类、接口)
- 抽象类、抽象字段、抽象方法
- 抽象类、抽象方法、抽象属性
- debian 64位安装tilecache 过程
- uml 类图
- myeclipse使用(技术和快捷键)
- C++实现抽象工厂模式
- 线程入门学习3-------线程的生命周期和常用方法
- 内嵌类 局部类 抽象类
- 如何让phpMyAdmin支持InnoDB引擎
- 黑马程序员_java基础(一)
- 指向函数的指针
- exception学习小结
- ruby 的module 与类
- 黑马训练营-学习笔记----面向对象
- 今日哈皮糗事
- 从不懂到成熟-我一年半企业站SEO酸辛经历