java——与c++之不同——类
来源:互联网 发布:薛之谦淘宝店连接地址 编辑:程序博客网 时间:2024/06/03 22:50
访问权限
成员访问权限
- 默认成员访问权限为package,只能被同一package内类访问
- protected可被同一package内类访问,因此protected = package + 跨package子类
- 成员访问权限大小:public > protected > package > private
类访问权限
- 默认类访问权限为package,只能被同一package内类访问和继承
- public类访问权限可被所有package内类访问和继承
注1:成员访问权限 = min(成员访问权限, 类访问权限),因此package类成员的public权限和protected权限本质还是package权限
注2:不管是成员访问权限还是类访问权限,package访问权限只是认知上的理解,访问权限本身并无package关键字,默认缺省就是package访问权限
继承
- 只支持单根继承,不支持多重继承,无显式父类则继承自root类Object
- 只有唯一继承方式,public继承,且public无须显式指明
class加载
- class被引用时(包括实例化对象和引用类static成员),jvm会加载相关class文件
- class加载顺序:父类(数据成员类->当前类)->子类(数据成员类->当前类)
- 数据成员类加载顺序与数据成员类(static和non-static)在类中定义顺序一致
初始化
static数据成员初始化
- static数据成员不属于实例对象成员,static数据成员于class加载时初始化,static数据成员初始化顺序与static数据成员在类中定义顺序一致,且只初始化一次
- static数据成员初始化早于non-static数据成员初始化
non-static数据成员初始化
- non-static数据成员属于实例对象成员,non-static数据成员于实例化对象时初始化
- non-static数据成员初始化顺序:父类(non-static数据成员->构造函数)->子类(non-static数据成员->构造函数)
- non-static数据成员初始化顺序与non-static数据成员在类中定义顺序一致
- non-static数据成员若无显式初始化,则初始化为0
this&super
- 引用本类用this
- 引用父类用super
构造函数
- java构造函数功能单一,不含初始化列表,或初始化列表散落在数据成员定义处,因此数据成员初始化先于构造函数调用
- 在性能和安全性之间,java选择了安全性,java数据成员默认初始化为0(引用类型为null)
- java构造函数无初始化列表,因此java构造函数本质并非初始化行为,因此java构造函数与普通函数无本质区别,构造函数多次调用不会导致重复初始化
- java构造函数非常灵活,构造函数可相互调用,但不可递归调用(直接递归或间接递归),构造函数调用语句只能放在主调构造函数首行,构造函数不可被普通函数调用
- 父类构造函数必须显式调用(子类构造函数调用),且必须放在首行,如果调用父类默认构造函数,可omit,因此除非调用父类默认构造函数,否则子类不可调用本类其他构造函数,否则违背构造函数调用必须放在首行原则
复制构造函数
- java只有heap实例对象,无stack实例对象,且实例对象只能通过引用间接访问,不可直接访问实例对象,因此java无复制构造函数
析构函数
- java通过GC(Garbage Collection)机制管理对象内存,因此java无析构函数
赋值操作符函数
- java不支持操作符重载,因此java无赋值操作符函数
non-static方法
- non-static方法默认runtime bind,因此编译期无法确认non-static方法是否会被调用,为避免runtime crash,non-static方法必须实现
- override方法时,子类访问权限不能比父类访问权限小,即子类访问权限必须大于等于父类访问权限(public > protected > package > private)
注:构造函数编译期bind,必须实现,父类子类构造函数之间访问权限大小无限制
static方法
- static方法既可通过类名(类作用域)引用,也可通过实例对象引用
- static方法名字按照类作用域对象名字查找规则查找,因此编译期bind
- static方法编译期bind,但也必须实现
阅读全文
0 0
- java——与c比较之不同(三)
- java——与c++之不同——类
- java——与c比较之不同——基本类型
- java——与c比较之不同——指针 引用 struct union 数组
- cpp——与c之不同——enum
- cpp——与c之不同——指针
- cpp——与c之不同——函数
- cpp——与c之不同——初始化
- C++与C不同之二——引用
- java——与c++之不同——其他
- const——c与c++不同
- C与指针——与谭浩强不同的C
- java——与c++比较之不同——类
- cpp——与c比较之不同——函数 static const
- cpp——与c之不同——内置类型
- cpp——与c之不同——数组 字符串
- cpp——与c之不同——struct union
- cpp——与c之不同——static const
- 【原】快速将Windows7 配置为无线…
- 【转】SSH 保持连接
- 【原】Python3 下 MP3格式文件的ID…
- Ubuntu 13.04 下 完美解决 QQ 问题
- GPT & MBR 设置隐藏分区/ 或分…
- java——与c++之不同——类
- 小米手机adb无法连接的问题。 ADB …
- 小米手机重新挂载
- Spring boot给接口返回添加request、response log
- KDE 802.1x MD5认证
- Linux中查看进程的多线程
- 高德地图-历史轨迹回放
- 1047. Student List for Course (25)
- MinGW 中如何生成独立于MinGW环境…