抽象类(abstract)

抽象方法充当着占位的角色 , 它们的具体实现在子类中。扩展抽象类可以有两种选择。 一种是在抽象类中定义部分抽象类方法或不定义抽象类方法, 这样就必须将子类也标记为抽象类;另一种是定义全部的抽象方法, 这样一来, 子类就不是抽象的了。

类即使不含抽象方法, 也可以将类声明为抽象类。 抽象类不能被实例化。 也就是说, 如果将一个类声明为 abstract, 就不能创建这个类的对象。
可以定义一个抽象类的对象变量,但是它只能引用非抽象子类的对象

C++注释:在C++中, 有一种在尾部用=0标记的抽象方法, 称为纯虚函数, 例如:
class Person// Ctt
{
public: virtual string getDescription() = O
...
}

只要有一个纯虚函数, 这个类就是抽象类。 在C++中,没有提供用于表示抽象类的 特殊关键字
希望超类中的某些方法允许被子类访问, 或允许子类的方法访问超类的某个域。为此,需要将这些方法或域声明为protected。如果将超类Employee中的hireDay声明为proteced,而不是私有的,Manager中的方法就可以直接地访问它。 不过, Manager类中的方法只能够访问Manager对象中的血eD ay 域, 而不能访问其他 Employee对象中的这个域。 这种限制有助于避免滥用受保护机制, 使得子类只能获得访问受 保护域的权利。
在实际应用中,要谨慎使用protected属性。假设需要将设计的类提供给其他程序员使用,而在这个类中设置了一些受保护域,由于其他程序员可以由这个类再派生出新类,并访 问其中的受保护域。在这种情况下,如果需要对这个类的实现进行修改,就必须通知所有使用这个类的程序员。这违背了OOP提倡的数据封装原则。
受保护的方法更具有实际意义。如果需要限制某个方法的使用,就可以将它声明为protected。这表明子类(可能很熟悉祖先类)得到信任,可以正确地使用这个方法,而其他 类则不行。 这种方法的一个最好的示例就是Object类中的clone方法
事实上,Java中的受保护部分对所有子类及同一个包中的所有其他类都可见,这与C++中的保护机制稍微有不同
Java用于控制可见性的4个访问修饰符:
仅对本类可见一一private。
对所有类可见一public
对本包和所有子类可见——protected。
对本包可见——默认(很遗憾), 不需要修饰符