Java面向对象(五)abstract --- 抽象

来源:互联网 发布:js下拉框默认选中 编辑:程序博客网 时间:2024/06/04 22:00

当多个子类中有名称一致当但是细节不同的行为时 , 将 这个行为向上提取到父类中,提取时 , 只提取方法定义,  不提取方法主体 , 这个方法叫抽象方法,抽象方法所在的类也必须是抽象类。  

抽象方法和抽象类都用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修饰的 。 

原创粉丝点击