抽象方法
1)由abstract修饰
2)只有方法的定义,没有具体的实现(连{}都没有)
抽象类
1)由abstract修饰
2)包含抽象方法的类必须是抽象类
3)抽象类不能被实例化(new对象)
abstract class Aoo{//抽象类
}
Aoo o = new Aoo(); //编译错误,因为抽象类不能被实例化
Aoo[] os = new Aoo[3]; //正确,因为这是在创建数组对象
4)抽象类不能被实例化,单独存在没有任何意义,所以抽象类是需要被继承的,抽象类一定要有派生类:
- 重写所有抽象方法-----------变不完整为完整(如果没有重写的话,在派生类中会报错,因为派生类继承了超类的不完整的抽象方法)
- 也声明为抽象类-------------不常用(如果派生类也被声明为抽象类的话,也不能被实例化了,所以没有任何意义)
5)抽象类的意义:
- 封装派生类共有的属性和行为------------代码复用
- 为所有派生类提供统一的类型------------向上造型
- 可以包含抽象方法,为所有派生类提供统一的入口(能点出来了) 派生类的具体实现不同,但入口是一致的
1.问:觉得超类中的抽象方法有点多余?
答:抽象方法的意义在于,当向上造型时,通过超类的引用能点出来它,因为抽象方法必须被重写,重写方法时看对象,所以具体执行的还是派生类重写之后的
2.问:抽象方法的作用若只是想能点出来,那为什么不设计为普通方法呢?
答:若设计为普通方法,则派生类可以重写也可以不重写,达不到强制重写的效果 而若设计为抽象方法,则可以强制派生类必须重写
当派生类的方法是一样的时候,是不需要抽象方法的,设计为普通方法即可,当派生类的方法不同时候,需要全部重写的时候,必须使用抽象方法和抽象类