java——与c++比较之不同——类

来源:互联网 发布:软件开发速成 编辑:程序博客网 时间:2024/06/14 01:01

访问权限

类成员访问权限

  • 默认访问权限为package,可以被同一package内类访问
  • protected可以被同一package内类访问,因此protected=package+跨package继承类
  • 访问权限大小:public>protected>package>private
  • 继承方式为public继承

类自身访问权限

  • public:可以被package外的类访问和继承
  • package:只能被package内的类访问继承(默认)

总结

  • 类成员访问权限=min(类成员访问权限, 类自身访问权限),因此package类成员的public权限和protected权限意义不大,package权限就足够了

类static成员

static修饰类成员,与c++中static修饰类成员类似
  • static修饰数据成员可以理解为java定义的寄存于类作用域下的外部对象定义
  • static修饰方法成员可以理解为java定义的寄存于类作用域下的外部函数定义
注:c++中static修饰的是数据成员的声明,方法成员的声明或定义

  • class加载顺序,基类(数据成员类->当前类)->继承类(数据成员类->当前类)
  • static数据成员不属于类对象,static数据成员于对应class加载时初始化,因此static数据成员初始化顺序与class加载顺序一致,只初始化一次
  • java构造函数功能单一,不含初始化列表,初始化列表散落在数据成员定义处
  • java初始化列表散落在数据成员定义处,因此数据成员初始化先于构造函数调用
  • 在性能和安全性之间,java选择了安全性,java数据成员含默认初始化值0(引用类型为null)
  • java构造函数不含初始化列表,所以java构造函数与普通函数无本质区别,构造函数可相互调用,但不可递归调用
  • 调用基类构造函数用super,调用本类构造函数用this
  • java对构造函数调用做了限制,构造函数调用语句只能放在主调构造函数首行
  • 调用基类构造函数必须显式调用,放在首行,如果调用的是基类默认构造函数,可以omit
  • java只有heap对象,没有stack对象,只能通过引用间接访问对象,不可直接访问对象,因此java无复制构造函数,也无赋值操作符函数
  • java通过GC机制管理对象内存,因此java无析构函数
  • java只支持单根继承
  • java方法默认都是runtime bind,因此编译期无法确认方法是否被调用,为了安全性考虑,避免runtime crash,方法必须实现(abstract方法和interface方法除外)
  • 覆写方法时,继承类的访问权限不能比基类小(public>protected>package>private)
0 0
原创粉丝点击