JVM是java内存模型
为什么要继承?
两个类,子类和父类
两个类出现了重复,所以 需要减少子类中重复冗余的属性和方法
继承:减少子类中重复冗余的属性和方法。怎么减少:把各个子类相同的属性和方法抽取到父类给各个子类继承。
extends继承:
java的类都是直接或间接继承object类,java定义的类没有写extends关键字,是直接继承了object类
下图hashCode来自与object类:
object类是java祖宗类,或者是顶级父类。
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
下图equals比较的还是地址
下图hashCode间接继承了object类
extends只能单继承,为了减少业务模型复杂度:
下图Child要么继承A,要么是B,只能有一个:
子类中创建子类的对象,会先调用父类的构造函数,再调用子类的构造函数
下图Son s = new Son会调用父类和子类构造函数,new Base的话,直接调用父类,不调用子类
子类的构造函数必须依赖子类的构造函数:
父类中没有构造函数的话,会提供默认无参构造函数,子类构造函数中不需要写super().
父类提供有参构造函数,子类构造函数中要写super(参数)
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
this();表示访问本类的构造函数:
构造函数中a=100;和this.a=100;是一样的。
this.都是访问本类 super. 都是访问父类:
一个父类指向多个子类的现象,叫做动态绑定, 可以去访问父类中的方法,因为Base b声明的是父类,想要访问子类方法,需要应用类型转换
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
引用类型,也叫做复合类型,也叫做对象类型
方法重写:
方法重写 ,也叫做方法覆盖 方法名相同 参数列表相同 返回值相同
调用哪个类的方法,是由new后面的对象决定的
多态:
表现两种:
1.一个类中,具有相同的方法,不同的参数列表(个数和类型不同),与返回值类型无关,与static无关,称为方法重载,又叫做编译时多态。
2.在继承关系中,子类和父类具有相同的方法名,相同的参数列表(个数和类型相同),相同的返回值类型, 称为方法重写。
2.1访问修饰符
子类方法重写的访问修饰大于等于父类访问修饰
public->protected->default-private
private的修饰的父类方法重写,没有被子类继承
2.2 static修饰的父类和子类所谓的方法重写,不是方法重写。(静态方法是属于这个类的,不是属于某类对象的)
子类方法重写的访问修饰符大于等于父类:
static修饰 不是方法重写!!