日常小记(5):子类与继承
不可以用 final、static、abstract 修饰构造方法。
如果在子类的构造方法中没有显式地写出 super 关键字来调用父类地某个构造方法,那么编译器默认有 “super();” 调用父类的无参数构造方法,如果父类没有这样的构造方法,代码将出现编译错误。
不可以用 final 和 abstract 同时修饰同一个方法
如果一个类的所有构造方法都的访问权限都是 private ,意味着这个类不能有子类,理由是一个类的 private 方法不能在其他类中被使用,但子类的构造方法中一定会调用父类的某个构造方法。
局部变量只在定义它的内部有效,并且不能使用 private ,protected,public 修饰符进行修饰,当局部变量所在的方法调用结束后,java 虚拟机将自动释放局部变量所占用的资源。

重写:子类继承父类后,定义了一个和父类一模一样方法,方法名和参数的定义相同。这时候子类要实现这个方法,就称为对父类方法的重写(覆盖)。
重载:子类继承父类后,定义了一个和父类中名字相同的方法,但是参数不一样(必须),实现也不同(可选),这就是重载。
静态方法:java中,static修饰符修饰的方法就是静态方法。所谓静态就是指:在编译之后所分配的内存会一直存在(不会被回收),直到程序退出内存才会释放这个空间。
静态方法不能被重写,但是可以重载。
子类不能重写父类的静态方法。
java子类可以继承父类除了private属性(私有属性)以外所有的属性变量。子类继承父类时,需要注意以下三点:
在子类继承父类的时候,子类必须调用父类的构造函数。
如果父类有默认构造函数,子类实例化时自动调用,但如果父类没有默认构造函数,即无形参构造函数,子类构造函数必须通过super调用父类的构造函数。
在java的继承当中子类是不可以继承父类的构造函数,只能调用父类的构造函数。

abstract类 中可以有 abstract类,也可以有 非abstract类。
abstract类 的子类可以是 abstract类,也可以是 非abstrac类。
static 不能修饰 abstract 方法:
java中抽象类中的抽象方法不可以使用static 构成静态抽象方法,抽象类是不能实例化的,即不能被分配内存;而static修饰的方法在类实例化之前就已经别分配了内存,这样一来矛盾就出现了:抽象类不能被分配内存,而static方法必须被分配内存。所以抽象类中不能有静态的抽象方法。
另外,定义抽象方法的目的是重写此方法,但如果定义成静态方法就不能被重写。

final 修饰符(最终):
不能派生子类(不能继承)
final 变量,其值不能在程序运行过程中改变,是常量(变量为常量)
final 方法,不能被子类重写(子类不能重写)

上转型对象:
不能访问子类新增的成员变量,不能调用子类新增的方法(新增不能用)
可以访问子类 继承 或 隐藏 的成员变量,也可以调用子类 继承的方法 或 重写的实例方法