现在的位置: 首页 > 综合 > 正文

比较Java和C++的几个修饰符

2018年07月10日 ⁄ 综合 ⁄ 共 1307字 ⁄ 字号 评论关闭

同样是支持面向对象的设计语言,Java和C++的一些修饰符都有共通的地方,但是由于设计理念的不同,这些修饰符也没有完全一样的。

abstract修饰符:

Java中的abstract修饰符语义是抽象性,主要的语法:

  1. 修饰一个类,表示这个类是抽象类,抽象类不能被实例化。这在C++中也有同样的概念,只不过C++声明一个抽象类是让类中的任意一个虚函数=0
  2. 修饰一个方法,表示这个方法是抽象方法,抽象方法不能有方法实现。这在C++中也有同样的概念,只不过C++中声明一个抽象方法使用virtual关键字,而且C++中别说是虚函数了,就连纯虚函数也是可以有实现的,这主要是为了提供一种默认的实现,在Java中就只好多派生一次了

final修饰符:

Java中的final修饰符语义是不变性,主要的语法:

  1. 修饰类,表示该类不能被继承,在C++中要实现不可继承的类可就费劲了,一般要用到高深的虚基类概念
  2. 修饰方法,表示该方法不能被重写,在C++中不能重写只需要不用virtual关键字就可以了,但是子类同名覆盖的问题就有点防不胜防了
  3. 修饰变量,表示该变量不能被重赋值,在C++中有可爱的const关键字完成相同的功能。但是Java中用final修饰的类类型的变量仍然是可以改变的自己的,因为在Java中是这是引用的语义,而这在C++中是绝对不可能的,C++中这是值的语义。
  4. 修饰方法的参数,表示该变量不能被重赋值,在C++中这还是const关键字的语义,不仅如此,C++中的const还能修饰函数返回值,在Java中这也是允许的,但是好像却没有什么实际的意义

static修饰符:

Java中的static修饰符语义是唯一性,主要的语法:

  1. 修饰成员变量,表示该变量是类唯一的静态变量,无论有多少类对象被创建,在C++中是相同的
  2. 修饰成员方法,表示该方法是类唯一的静态方法,只能操作类中的静态变量,在C++中是相同的
  3. 修饰代码块,表示该代码块是类唯一的静态代码块,当类被加载时就执行,在C++中没有这个概念,一般通过一个静态函数就可以搞定的事情,Java中的静态代码块看起来很酷,但是能少用还是少用为好
  4. 修饰内部类,表示该类是静态内部类,没有外部类的this指针传递进来,在C++中肯定是这样的,才不会主动给你传递什么外部类的this指针呢,如果想做,程序员自己来
  5. 在非静态内部类和局部类中不能有static成员,不了解这条规则是什么道理?在C++中是没有这么强烈的限制的

总结一下:

Java中的abstract,final,static修饰符因为语义的限制都是不能修饰构造函数的,而且abstract和final,abstract和static语义是矛盾的,不能连用,而static和final是可以连用的。

Java中的final关键字和C++中的const关键字语义都是不变性,有一些相同之处,但是区别同样是明显的

Java中的static关键字和C++中的static关键字语义都是唯一性,但是C++中的static因为历史原因还有更多其它的含义。

 

转自:http://blog.csdn.net/oowgsoo/article/details/2052282

抱歉!评论已关闭.