类与类的关系有以下几种:
A is-a B 继承、实现===>统称泛化
A has-a B 组合、聚合、关联===>统称包含
A use-a B 依赖(need)
继承:
子类、父类
1.子类继承父类,通过关键字“extends”;
2.子类的对象可以调用父类的(public、protected)属性和方法,当作自己的去使用,增强了复用性;
3.子类可以添加自己独有的方法和属性;
4.子类从父类继承来的方法不能满足子类的要求,可以在子类中重写(覆盖)父类的方法--->方法重写 override,重写主要是内容,结构一般相同;
5.每一个类都有继承类,如果不写extens关键字,那么就继承Object类,如果写了extends关键字,那么就继承后者;如果子类继承了父类,而父类继承了Object,那么子类也是Object的子类,即继承是可以传递的,所以Object类是任何引用类型的父类,Object类是没有父类的。
6.Java中继承是单个存在的(单继承),每一个类只能有一个继承类,即extends关键字后面只能写一个类;目的是为了让类更安全;但是可以通过传递的方式实现都继承的效果,后续还会有多实现;
=========================================================================补充:Object类中的方法:
1.hashcode():将对象在内存中的地址经过计算得到一个int整数;
源码:
public native int hashCode();
2.to String():在打印输出时,将对象变成String字符串;
public String toString(){
//源码中这两个this.是被省略的;
return this.getClass().getName()+"@"+Integer.toHexString(this.hashCode);
}
3.get Class():获取对象对应类的类映射(反射);
4.equals():用来比较两个对象的内容,Object的默认效果是==;
== :可以比较基本数据类型(值),也可以比较引用类型(比较地址);
equals方法是Object类中继承过来的方法,默认效果是比较地址;如果需要改变规则,可以进行方法重写;
源码:
public boolean equals(Obj obj){
return (this == obj);
}
5.wait():让线程进入挂起等待状态,存在重载(无参数,一个参数,两个参数);
6.notify():线程唤醒;
7.notifyAll():全部线程唤醒;
8.finalize():权限修饰符是protected,在对象被GC回收时,默认调用执行的方法;
构造函数(创建对象)---析构函数(回收对象);
9.clone():权限修饰符是protected,为了克隆对象;
=========================================================================
方法重写和方法重载的区别:
方法的结构:
方法重写 方法重载
权限修饰符 子类可以大于等于父类 没有要求
public>projected>默认不写>private
特征修饰符 如果父类方法是final 子类不能重写; 没有要求 (final static abstract)
如果父类方法是static 子类不存在;
如果父类方法是abstract 子类如果是具体的必须重写,否则就是抽象类,可以不重 写;
返回值类型 子类的返回值可以小于等于父类 没有要求
方法名 子类与父类一致 一个类中的好多方法名一致
参数值列表 子类与父类一致 每一个方法的参数必须不一致
抛出异常 运行时 编译时 没有要求
如果父类方法抛出运行时异常,子类可以不予理会;
如果父类方法抛出编译时异常,子类抛出异常的个数少于等于父类;子类抛出异常的 类型小于等于父类;
方法体 子类的方法内容和父类不一致 每一个重载的方法执行过程一般不一致
=========================================================================