Java面向对象的三大特征:
封装:通过Java的类来实现数据和操作方法的封装,对外界可以将每一个Java类都视为一个黑箱,只需调用该黑箱提供的方法即可完成你想要的操作。
继承:通过类的继承,将统一的功能集中放在父类中,实现代码的重用和可维护性。
多态:通过重载、重写与覆盖,实现不同类的不同形态特征。
一个被定义成private的类成员为此类私有,它不能被该类外的所有代码访问,包括子类。
如果子类中不显式调用父类的构造函数,则会调用父类的默认构造函数(如果有的话)。
父类和子类的相互转换
在Java中我们可以将子类的引用赋给父类的对象,那么这时子类中那些不是从父类继承来的成员将不再可见,我们可以在通过强制转换类型将父类再转换成子类类型,那些成员又变得可见了,那么转换的时候发生了啥?
一个类在构造出来的时候,先把其各级父类都构造出来,一家人就是要齐齐整整嘛。这里写个测试例子,看看能不能拿到父类引用。
看来是拿不到父类实例的引用了。
必须被继承的类:抽象类
不能被继承的类:最终类
父类的private成员方法是不能被子类方法覆盖的,因此private类型的方法默认是final类型的。
final方法
如果不允许其子类覆盖某个方法,则可以把这个方法声明为final方法。
使用final方法的原因有两个:
把方法锁定,防止任何继承类修改它的意义和实现。
高效,编译器在遇到final方法时会转入内嵌机制,大大提高执行效率。
对于final static类型的变量,static使得变量只存在一个副本,final使得它不能改变。
final成员赋值规定:
final成员能且只能被初始化一次。
final成员必须在声明时或者在构造方法中被初始化,而不能在其他的地方被初始化。
类,抽象类和接口的区别?