1、使用合成定义一个类,就是将一个或多个已有类的对象作为数据域,新类的实现与已有类的其他所有客户相同,也就是说,该类必须适用对象的方法来操作对象的数据。
2、合成定义了两个类之间是“有一个”的关系。
3、可以在类的定义中使用一个或多个通用类型来表示真正的数据类型,这样当创建该类的对象时,就可以使用了。
4、继承是将具有共有属性与行为的类组织到一起。共有属性与行为对所有的类之定义一次,因而可以定义一个一般的类(即基类),稍后再通过添加或修改已有的、更一般的类定义的细节类定义更具体的类(即派生类)。
当两个类之间具有“是一个”的关系时使用继承。
当两个方法具有相同的名称、相同的返回值类型、相同的参数数目和类型时、派生类中的方法就覆盖了基类中的方法。
当两个方法具有相同的名称,但参数类型或数目不同时,一个方法就重载了同一个类或者基类中的另一个方法。
祖先类的对象所具有的任何方法,后代类的对象也可以执行。
5、访问修饰符:protected:受保护的方法可以在它自己所在的类、派生类或者同一个包里其他类中按名称来访问。
每一个类都是Object类的后代。
抽象类不能有实例,只能作为基类。任何省略了一个或多个方法定义的类,都必须声明是抽象的。
构造函数不能是抽象的(abstract)、最终的(final)或静态的(static)。
多态性是这样一个概念:对象在运行时决定一个被覆盖的方法名称将对应哪一个操作。
动态绑定是实现多态性的处理方式。
调用一个被覆盖的方法(或者一个使用了覆盖方法的方法)时,该方法对应的操作是在创建该对象的构造函数所在的类中定义的那个,该操作不是由对象命名的变来那个类型决定的,任何祖先类的变量都可以保存一个后代类的对象,但对象总是记得每个方法名称应该对应什么操作,这时应为Java使用了动态绑定。
命名一个对象的变量决定了该对象可以调用哪些方法名称,然而是对象而不是变量名称决定了将调用那个方法定义。
编程提示:
1、派生类的构造函数自动的调用了基类的构造函数,然而可以在派生类的构造函数定义中使用了super()方法调用基类的构造方法。此时super()必定是构造函数定义里的第一个操作,不能用构造函数的名称来替代super(),如果省略了super(),派生类的每个构造函数将自动调用基类默认的构造函数。
2、任何其他包括派生类的类定义中,都不能按名称访问基类中私有的数据域或方法。
3、派生类不能通过名称调用积累的私有方法。
4、可以在派生类中使用super()调用被覆盖的基类方法。
5、派生类中的方法不能调用积累的基类中定义的被覆盖的方法,也就是说super().super()方法是非法的。
6、如果一个构造函数调用了同一个类中的另一个方法,比昂将那个方法声明为final,则任何子类都不能覆盖该方法,从而也不能修改该构造函数的行为。
7、String类不能作为任何类的基类,因为他是一个最终类。
8、在设计一个类时,应该同时考虑从它派生出的类,设想哪些类有可能需要访问当前设计类的数据域,如果所设计的类没有共有的访问者方法或修改者方法,就应该提供这些方法的受保护版本。
9、具有至少一个抽象方法的类,必须被声明为抽象类。