总结:
1. 抽象类不能被实例化(初学者很容易犯的错), 如果被实例化, 就会报错, 编译无法通过. 只有抽象类的非抽象子类可以创建对象.
2. 抽象类中不一定包含抽象方法, 但是有抽象方法的类必定是抽象类.
3. 抽象类中的抽象方法只是声明, 不包含方法体, 就是不给出方法的具体实现也就是方法的具体功能.
4. 构造方法, 类方法 (用 static 修饰的方法) 不能声明为抽象方法.
5. 抽象类的子类必须给出抽象类中的抽象方法的具体实现, 除非该子类也是抽象类.
详细解释:
>1. 抽象类不能被实例化(初学者很容易犯的错), 如果被实例化, 就会报错, 编译无法通过. 只有抽象类的非抽象子类可以创建对象.
但是抽象类可以有构造函数, 用来当子类调用 super()...
- public abstract class Employee
- {
- private String name;
- private String address;
- private int number;
- public Employee(String name, String address, int number)
- {
- System.out.println("Constructing an Employee");
- this.name = name;
- this.address = address;
- this.number = number;
- }
- }
- //---------------------------------
- public class Salary extends Employee
- {
- private double salary; //Annual salary
- public Salary(String name, String address, int number, double
- salary)
- {
- super(name, address, number);
- setSalary(salary);
- }
- }
>4. 构造方法, 类方法 (用 static 修饰的方法) 不能声明为抽象方法.
重点常考!:final 和 abstract,private 和 abstract,static 和 abstract, 这些是不能放在一起的修饰符, 因为 abstract 修饰的方法是必须在其子类中实现(覆盖), 才能以多态方式调用, 以上修饰符在修饰方法时期子类都覆盖不了这个方法, final 是不可以覆盖, private 是不能够继承到子类, 所以也就不能覆盖, static 是可以覆盖的, 但是在调用时会调用编译时类型的方法, 因为调用的是父类的方法, 而父类的方法又是抽象的方法, 又不能够调用, 所以上的修饰符不能放在一起.
---------------------
来源: http://www.bubuko.com/infodetail-3034498.html