abstract修饰符可以修饰
1. 方法(抽象方法)
1.1 被abstract修饰符修饰,只有声明没有实现的方法.
2. 类
2.1 被abstract修饰符修饰.
一般在类的层次图中处于高层的类,类信息不足以描述一个对象.对于现实世界中并没有对应的真正实例与之对应。如Person是一个抽象类,并没有真正的一个对象对应于Person类


//Person.java public abstract class Person{ public String getName(){ return name; } public abstract String getDescription(); private String name; } //Student.java public class Student extends Person{ @Override public String getDescription(){ return "Student major in " + major; } private String major; } //Employee.java public class Employee extends Person{ @Override public String getDescription(){ return "Employee 's salary is : " + salary; } private double salary; }
由于Person对象对于自己真正的描述并不清楚,所以对于getDescription的方法并没有足够的信息可以描述,也有将getDescription直接返回空字符串的方案,然而这样是不合理的,因为getDescription在语意上并不表明Person的真正描述。所以使用abstract类是更好的方案。因为这样就能保证抽象类是无法出现对应它的实例,然而可以声明一个抽象类的对象变量,根据多态的原则,该抽象类的对象变量只能引用具体类的对象。
继承抽象类有两种选择:
1. 实现所有的抽象方法,可以将继承类声明为具体类。(即使实现了所有的抽象方法,也是可以将该类标明为抽象类.保证该类不被初始化,当我们不希望出现某个类的对象实例之后)
2. 实现了部分的抽象方法,只能将该继承类继续标明为抽象类
Protect Access:
修饰字段(并不是一个十分好的选择):
1. 因为字段被修饰为Protected之后,虽然外包的非继承类不能访问到该类的保护字段,然而对于这种被修饰的字段,是不受到保护的,因为对于继承的限定是没有的(该类被声明为final外)
1.1 打破了封装,因为任何一个自己的类可以继承某类只是为了访问其保护字段。
修饰方法(一般来说这是有效的)
1. 当某方法在基类中的实现并不具备在子类中使用的场景,而每个子类欲使用父类的语意,必须进行方法的覆盖的时候,那么将方法修饰为保护型的范围是比较合理的。