类和类之间的关系
类和类之间的关系
A is-a B 泛化(继承 实现)
A has-a B 包含(组合 聚合 关联)
A use-a B 依赖(依赖) (need-a)
继承 is-a
- 子类继承父类,通过一个关键字 extends
- 子类的对象可以调用父类中的(public protected)属性和方法 当做自己的来使用
2.1构造方法严格意义来说 不算做子类继承过来
只是单纯的在子类调用构造方法时默认调用父类的构造方法
2.2程序块严格意义来说 不算做子类继承过来(子类自己调用不到 没名字)
程序块子类不能直接调用 子类执行构造方法之前
默认调用了父类的构造方法 父类构造方法之前自动执行父类的块 - 子类可以添加自己独有的属性和方法的 子类还可以添加自己独有的成员(属性 方法)
- 子类从父类中继承过来的方法不能满足子类需要,可以在子类中重写(覆盖)父类的方法 更多指的是内容
4.1关于 方法重写(override) 和 方法重载(overload)区别 - 每一个类都有继承类,如果不写extends关键字,默认继承Object,如果写了extends则继承后面那个父类
可以理解为Object类非常重要 是任何一个引用类型的父类(直接或间接的继承Object) Object类没有父类
Object类很重要,他是所有引用类型的父类,Object类是没有父类的
Object类中的方法 - Java中继承是单个存在的(单继承) 每一个类只能有一个继承类 (在extends关键字后面只能写一个类)
可以通过传递的方式实现多继承的效果 后续还会有多实现 - 继承在内存中的存储形式
- 关于this和super的使用
this和super都是指代词 代替的是对象
this代替的是当前执行方法时的那个对象 不一定是当前类的
super代替的是当前执行方法时的对象的父类对象 空间内部的那个
都能调用一般属性 和 一般方法
可以放置在类成员的任意位置(属性 方法 构造 块)
注意调用一般方法的时候可以来回互相调用(写法 编译好用) 执行可能产生问题(StackOverflowError)
可以调用构造方法(放在构造方法的第一行)
this和super在构造方法中调用另一个类的构造方法不能同时出现在第一行
构造方法之间不能来回互相调用(编译就不好用)
Object类中的方法
hashCode() 将对象在内存中的地址经过计算得到一个int整数
public native int hashCode();
equals() 用来比较两个对象的内容 Object默认效果是==
==可以比较基本类型(比较值) 可以比较引用类型(比较地址)
equals方法时Object类中继承过来的方法 默认效果比较地址
如果想要改变其规则 可以进行方法重写
public boolean equals(Object obj){
return (this == obj);
}
toString() 打印输出时将对象变成String字符串
public String toString(){
return this.getClass().getName()+"@"+Integer.toHexString(this.hashCode());
}
getClass() 获取对象对应类的类映射(反射)
wait() 线程进入挂起等待状态 存在方法重载
notify() 线程唤醒
notifyAll() 唤醒所有
finalize() 权限修饰符是protected 在对象被GC回收的时候 默认调用执行的方法
final finally finalize区别
protected void finalize(){
}
clone() 权限修饰符是protected 为了克隆对象