子类对象创建之前,会先产生父类对象。然后在父类对象基础之上,扩展子类特有的属性和方法。
所以子类对象中包含完整的父类对象,就可以重用父类中定义的方法和属性。
子类对象创建之前,需要通过super()调用父类的构造方法,产生父类对象。
如果子类构造方法中没书写super(),这这时,虚拟机会自动调用super()。
如果父类中没有无参构造方法,子类必须通过super(参数)显示调用。
引用类型的变量,如果修饰为final,表示该变量的值不能变化。也就是不能再指向别的对象。
final 关键字
可以修饰类、方法、变量。
修饰类,表示该类不能被子类所继承,修饰方法表示该类不能被子类重写,修饰变量表示该变量的内容不能改变。
public 该类或非该类均可访问
private 只有该类可以访问
protected 该类及其子类的成员可以访问,用一个包中的类也可以访问。
默认 相同数据包中的类可以访问。 私有属性只有在本类中使用。
访问修饰符:
访问权限
|
Private成员
|
缺省成员
|
Protected成员
|
Public成员
|
同一类中
|
是
|
是
|
是
|
是
|
同一类包中的其他类
|
否
|
是
|
是
|
是
|
不同包中的子类
|
否
|
否
|
是
|
是
|
该类及非该类均可访问
|
否
|
否
|
否
|
是
|
封装:
按照信息隐藏的原则,将数据组织在一起。
封装有两个特点:
- 信息隐藏
- 信息集合
私有属性+get/set方法和公有属性的区别:
- 私有属性不能被直接访问,只能通公有的get方法(访问器)和set方法(修改器)来进行设置值和取值。这样一旦删掉get或set方法,可以将该属性做成只读或只写属性。公有属性做不到。
- 可以通过修改器在设置属性时,做数据合法性的验证。但公有属性做不到。
public class 类
static {
}
称为静态初始化块。在类加载时执行,也就是在产生对象之前执行,而且只执行一次。
内部类:
在一个类中,再定义一个类,这称为内部类。
内部类相当于外部类的属性,内部类对象的产生必须依赖于外部类对象。
内部类所产生的class文件:
外部类类名$内部类名.class