你的位置:首页 > 信息动态 > 新闻中心
信息动态
联系我们

类与类的关系

2021/12/23 13:20:19

类与类的关系有以下几种:

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 子类如果是具体的必须重写,否则就是抽象类,可以不重                          写;

返回值类型    子类的返回值可以小于等于父类                 没有要求

方法名           子类与父类一致                                          一个类中的好多方法名一致

参数值列表    子类与父类一致                                          每一个方法的参数必须不一致

抛出异常       运行时 编译时                                              没有要求

                     如果父类方法抛出运行时异常,子类可以不予理会;

                     如果父类方法抛出编译时异常,子类抛出异常的个数少于等于父类;子类抛出异常的                       类型小于等于父类;

方法体          子类的方法内容和父类不一致                        每一个重载的方法执行过程一般不一致

=========================================================================