当多个子类中有名称一致当但是细节不同的行为时 , 将 这个行为向上提取到父类中,提取时 , 只提取方法定义, 不提取方法主体 , 这个方法叫抽象方法,抽象方法所在的类也必须是抽象类。
抽象方法和抽象类都用abstract修饰 。
抽象类不能实例化 。 原因: 如果通过抽象类的对象直接调用没有方法实体的抽象方法没有意义 。
抽象方法是有构造函数的 。 理解: 类都是 有构造函数的 。 抽象类不能实例化 ,只是程序员不能在java中实例化抽象类 ,抽象类的实例对象在java底层由c语言创建 。
抽象类中可以有实体函数 。 理解: 抽象类与普通类的区别 :1. 抽象类中可以有抽象方法 。2. 抽象类必须用abstract修饰 3. 抽象类不能在java代码中实例化对象 。 除此之外没有 区别 。
抽象方法在调用之前必然会被重写。 理解: 抽象类被继承后子类必须重写抽象类中的抽象方法 , 或者把子类也声明抽象类 。
抽象类的构造方法可以私有化 。 理解: 构造函数私有化之后, 其他外部类不能继承该类 , 但是该类的内部类仍然可以使用构造方法去继承 。
抽象方法可以被重载 。 理解: 重载只关心方法的方法名一致 , 参数列表不同 。 与修饰符无关 。
一般类中不能写出现抽象方法。
问:
1. 抽象类不能创建对象,抽象类有构造函数么?
解: 有
所有的类都有构造函数。
2. 抽象方法可以用final修饰么?
解: 不可以
final修饰方法后 , 该方法可以被继承 , 可以被重载 , 但是不能被重写 , 而不被重写的抽象方法是没有意义的。
3. 抽象类中可以定义静态方法么?
解: 可以
4. 抽象方法之间可以重载么?
解: 可以
5. 抽象方法可以用static修饰么?
解: 不可以
抽象方法需要被子类重写后实现具体功能,但是静态方法不能被重写。
6. 抽象方法可以使用默认的修饰符么?
解:可以
抽象类中 修饰符默认 default 只有同包子类可以继承这个抽象类。
7. 抽象方法可以用private修饰么?
解: 不可以
抽象方法需要子类重写后实现具体功能,修饰符设为私有后不能被重写。
8. 子类在继承父类的时候,什么 东西无法被继承?
解: 构造方法、所有私有的东西、代码块
9. 抽象类能被final修饰么?
解: 不能
抽象类需要被子类继承后实现其中的方法,但抽象类被final修饰后为最终类不能被继承。矛盾。
总结 : 抽象类中不能有private 、 final关键字 , 抽象方法不能是static修饰的 。