用关键字abstract修饰的类称为抽象类(abstract类)。
(1)抽象类可以有抽象方法,也可以有非抽象类方法。
对于抽象方法,只允许声明,不允许实现。任何带有抽象方法的类必须声明为抽象类。
如果一个非抽象类是某个抽象类的子类,那么它必须重写父类的抽象方法,给出方法体,
即在子类中将抽象方法重新声明,但必须去掉abstract修饰,同时保证声明的方法名字,返回类型,参数与父类的抽象方法完全相同,所以不允许使用final和abstract同时修饰一个方法。
(2)抽象类创建对象,不能new对象。可以使用子类的上转型对象创建抽象类的对象。
A a=new B();
//A 为抽象类,B为抽象类A的子类
上转型对象:把子类创建的对象的引用放到父类的对象中,得到该对象的一个上转型对象。
这个上转型对象在调用方法时就可能具有多种形态,不同对象的上转型对象调用同一种方法可能产生不同的行为。(多态)
面向抽象的核心思想:
(1)抽象细节
第一步,将经常需要变化的部分分割出来,将其作为abstract类中的抽象方法,不让设计者去关心实现的细节,避免所设计的类依赖于这些细节。
(2)面向抽象设计类
第二步就是面向抽象类来设计一个新类。