复用类
组合语法
组合语法就是在类中用其他类的对象作为本类的成员变量。
编译器不会为每一个引用都创建默认对象,想要初始化引用,可以在下列位置进行:
- 在定义对象的地方
- 在类的构造器中
- 在使用对象之前,惰性初始化
- 使用实例初始化
继承语法
关键字:extends
继承时,会自动得到基类中所有的域和方法。
类在初始化的时候是由内向外的,也就是说先初始化最顶层的父类,然后初始化次一层的父类,以此类推,最后初始化当前类。
不特意创建构造器的话,编译器会为其创建默认构造器,但是要是创建了构造器,就要用super显式的调用父类构造器。
在类垃圾回收的时候,是与初始化方向反的。
名称屏蔽
在对基类方法进行覆盖时,有可能覆盖的方法与父类的参数不同,因为参数不同,编译器会将其作为方法的重载来处理,如果你想覆写而不是想重载的时候,可以用@Override来注解,它并不是关键字,但是可以当做关键字来使用。
protected
protected关键字,对于用户而言是private,对于继承类是public。
向上转型
方法的参数对象可以是该参数类型的所有子类,因为父类所具有的变量和方法子类都有,所以可以使用向上转型。
比如如下代码:
class A{
int i;
void fun(){}
}
public class B extends A{
public static void main(String[] args){
B b= new B;
funs(b);
}
static void funs(A a){
System.ot.println(a.toString());
}
}
final关键字
final数据:
- 一个永不改变的编译时常量
- 一个在运行时被初始化的值,而你不希望他改变。
一个既是static又是final的域只占据一段不能改变的存储空间。
当对象是引用不是数据时,引用恒定不变,但是对象自身是可以改变的。
空白final:
指被声明为final类型又未给定初值的域。无论什么情况,编译器都确保空白final在使用前必须被初始化。
final参数:
java允许在参数列表中以声明的方式将参数指明为final。这意味着你无法更改参数引用所指向的对象。
final方法:
- 方法锁定,以防任何继承类修改他的含义,不会被覆盖。
- final指定的方法转为内嵌调用,提高效率。
- 类中所有的private方法都隐式的指定为final方法。
final类:
final类不会有子类。