再看继承

    继承在java中无处不在。继承有两种用法:第一种是通过扩展类,纯粹的创建继承关系;第二种则是以多态的方式访问一个类。关于继承,也有IS-A和HAS-A之说,IS-A是基于类继承或接口实现的,而HAS-A关系基于用法,并不是继承。
    重写和重载是继承中最常见的。只要拥有一个继承超类方法的类就有机会重写该方法,但不能重写被标记为final和static的方法;来自超类的方法在子类中可以重载,重写和重载的规则如下:
                            重载方法           重写方法      
参数列表                                 必须修改          一定不能修改    
返回类型                                 可以修改       除协变式返回外,不能修改
异常                                     可以修改       可以减少或删除,不能抛出心的或更广泛的检查异常
访问                                     可以修改      一定不能执行更严格的限制(可以降低限制)
调用                            应用类型决定选择哪个重载版本(根据声明的参数类型),这发生在编译时。被调用的实际方法仍然是发生在运行时的虚拟方法调用,但是编译器已经知道所调用方法的签名。因此在运行时,参数匹配已经明确,只是还不知道该方法所在的实际类 对象类型(换句话说就是堆上实际实例的类型选择哪个方法,这发生在运行时)


    对于java的程序来说,构造函数可以说是不可缺少的。即使不为类提供构函数,编译器也总是会插入一个默认的构造函数,它是一个无参数构造函数,并对super()进行无参数调用。如果在类中已有一个构造函数(无论该构造器参数如何),则永远都不会再生成默认的无参数构造函数了。构造函数有很多规则:不掉用构造函数就不能创建对象,每个类(包括抽象类),都至少有一个构造函数,构造函数名和其类名必须相同,构造哈双女户没有返回类型等等。构造函数永远不会被继承,因此也不能重写构造函数,它只能由另一个构造函数直接调用(使用super()和this()的调用)。
     在本章的学习中,还碰到了耦合和内聚。耦合指一个类了解另一个类的程度;内聚指其中一个类具有单一、良好定义的角色或职责的程度。松散耦合是一种理想状态,他具有良好封装的类,把互相间的引用减至最少,并且限制了API的使用宽度,紧密耦合不是一种理想状态,他具有破坏松散耦合的类;高内聚是一种理想状态,其中类的成员支持单一、明确的角色或职责,低内聚不是一种理想状态,其成员支持多种、不明确的角色或职责。

你可能感兴趣的:(继承)