在面对对象的世界中,一切都可以通过类来使用,万事万物皆对象·
但是在某些类比较抽象的概念 ,没办法对应到具体的实体
比如Sharp(图形类)无法具体描绘一个对象,只是作为具体对象的父类,这种类就可以定义抽象类!!!
使用关键字abstract定义抽象类,抽象类是普通类的超集!只是比普通类多了一些抽象方法而已,普通类具有的内容,抽象类都有
使用anstract定义抽象方法,抽象方法没有方法体,只有方法声明,但是,这并不是说没有方法体就是抽象方法,要先看是否有关键字abstract
eg:在Java中,native放法也是没有方法体的,这种方法不是抽象方法本地方法是由C++实现的方法,Java只负责调用,方法体实现是C++代码
JVM本身就是C++实现的
抽象类和抽象方法的使用原则:
- 抽象类不能直接实例化对象,即使抽象类中,没有任何抽象方法,也无法实例化对象!
只能通过向上转型进行引用赋值
2 抽象类的子类若是普通类,必须覆写抽象类的所有抽象方法但如果子类是抽象类可以一个方法都不覆写!!(强制子类必须进行方法的覆写,保证多态的正常运行)抽象方法所在的类必须使用abstract声明为抽象类
3 abstract和其他关键字的使用
private和 abstract能否修饰一个方法?
不能
因为private子类无法进行覆写,abstract必须被子类覆写
final 和 abstract能否同时出现?
不能
final没有子类,也不能被覆写而abstract必须有子类必须被覆写
static和abstract能同时出现吗?
不能 abstract 和static,final,private不能同时出现
关键点:抽象方法没有加访问权限时默认是包权限
4 抽象类是普通类的的超集,抽象类中仍然能定义普通方法和构造方法,且满足对象那个实例化流程,先调用抽象类的构造方法而后调用子类的构造方法
抽象类就是在普通类的基础上进一步提取,只是比普通类多了一些抽象方法而已
抽象方法的存在要求子类必须进行覆写,从而保证多态的正常运行
341

被折叠的 条评论
为什么被折叠?



