final理解成最终的意思
final定义的类是不可被继承的
final class A{
}
class B extends A{
} //错误,A不能被继承
final 修饰的变量为常量,不可被更改,但是要大写
final String IN = "in";
final定义的方法无法被子类覆盖
super关键字
super 和this一个理解成父类,一个理解成子类
this() 、super() 都当成子类父类的构造方法
super.get()就是调用父类的方法
this.get()就是调用自己类的方法
抽象类 abstract class
抽象类不能直接被用来实例化,只能实例化他的衍生类
抽象类中的抽象方法必须被子类全部覆写
类的继承
方法的覆写
子类的访问权限不能比父类更严格
类的构造方法
子类在实例化的时候,会自动调用父类的构造方法。
如果父类的构造方法是不用传参的,并且是写出来的构造方法而不是系统默认的,那么super()可以省略,否则要先用super完成父类的构造方法
abstract class A {
public A(String a) {
System.out.println(a);
}
void print() {
System.out.println("happy today");
}
}
class B extends A{
public B(String b){
super(b); //子类会自动调用父类的构造方法
System.out.println("today");
}
void print() {
System.out.println("error");
}
}
public class _5_jicheng {
public static void main(String[] args) {
B b = new B("HAPPY");
b.print();
}
}
如果A 中有0参构造方法,super()就可以省略
package jvm;
abstract class A {
public A(String a) {
System.out.println(a);
}
public A() {
System.out.println("0000");
}
void print() {
System.out.println("happy today");
}
}
class B extends A{
public B(String b){
//super();//子类会自动调用父类的构造方法
System.out.println("today");
}
void print() {
System.out.println("error");
}
}
public class _5_jicheng {
public static void main(String[] args) {
B b = new B("HAPPY");
b.print();
}
类的向上、向下继承(多态性)
A是父类,B是子类, a、b分别是父类和子类的实例对象
向上继承:父类 父类对象 = 子类实例 B b = new B(); A a = b; 或者 A a = new B()
向下继承:子类 子类对象 = (子类)父类实体
向下继承之前必须先发生向上继承的关系才行
只有先 A a = new B(); B b = (B) a;
设计模式
工厂模式:实现接口的很多子类放入一个工厂类,主方法调用的是工厂类;
代理模式:给定接口,一个类作为实际类实现接口的方法,一个类作为代理类,实现更多的方法包括对实际类中方法的调用;
适配器模式:接口的方法很多都实现冗余,建设一个抽象类,实际类只用实现抽象类的部分方法就行。