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