[6]单态和继承


一.static关键字

1.什么是static关键字

  • static代表静态的, 可以修饰类的成员, 都和类加载有关.

* 2.静态变量

  • 类加载后初始化

  • 可以通过"类名.变量名"访问

  • 被该类所有实例共享

  • 当定义一个变量希望被共享, 或者类加载后就能使用时, 就定义为静态的.

* 3.静态方法

  • 类加载后可以调用

  • 可以通过"类名.方法名"访问

  • 不能使用外部非静态成员

  • 当定义一个方法时, 这个方法不访问外部任何非静态成员, 就可以定义为静态的, 这样做不用再创建对象就能使用.

4.静态代码块

  • 类加载后就执行

  • 不能使用外部非静态成员

  • 当有一些代码希望在类加载之后就执行, 且只执行一次的时候, 就可以定义为静态代码块.


二.垃圾回收

1.finalize

  • 在一个类中写了finalize方法之后, 对象销毁时会执行这个方法中的代码

2.gc

  • System.gc()可以通知虚拟机销毁内存中的垃圾对象


三.单态设计模式

1.什么是单态设计模式

  • 当定义一个类, 而希望这个类只能创建一个对象时, 可以使用单态设计模式

2.单态设计模式的写法

  • 私有化构造函数

  • 类内部创建对象, 用成员变量引用, 私有化防止类外修改

  • 提供一个公有的静态的方法, 让类外可以获取到该对象


四.继承

1.什么是继承

  • 一个类可以使用extends继承另一个类, 子类继承父类之后得到父类的所有成员. 提高代码复用性.

2.继承的特点

  • Java只支持单继承, 不支持多继承, 但是可以多重继承.

*** 3.类型转换

  • 子类对象可以当作父类对象使用, 因为父类有的子类都有.

  • 一个父类引用可以指向一个子类对象, 但是这时不能调用子类特有的方法.

  • 子类当父类用时, 如果要调用子类特有的方法, 可以使用强制类型转换将父类变量强转回子类.

  • 强制类型转换时, 不论类型是否匹配, 编译都不会报错, 运行时类型不匹配会抛出异常ClassCastException

  • 在强制类型转换之前, 通常都使用instanceof进行类型判断. 

*** 4.重写方法

  • 子类覆盖父类的方法时, 返回值类型, 方法名, 参数列表必须全部相同.

  • 不能定义更低的访问权限.

  • 可以使用"super.方法名"访问父类的方法.

  • 在调用一个对象的方法时, 该对象是哪个类的对象就先找哪个类, 如果这个类中有指定方法就执行, 没有就找父类.

  • 在重写方法时, 可以使用@Override来检查当前方法是否成功覆盖父类方法, 如果没有覆盖, 编译会报错.

*** 5.子类对象的创建

  • 创建子类对象的时候, 会先创建一个父类对象. 

  • 在执行子类构造函数的时候, 会先执行父类构造函数.

  • 通过super()可以调用父类构造函数, 如果不指定, 那么就调用无参的.

  • super()和this()相同, 都只能是构造函数的第一个语句. 二者不能同时出现在一个构造函数中.