Java中的抽象类
1.抽象类是什么
2.抽象类和抽象方法如何定义
3.抽象类特征
1.抽象类是什么
在前面我们学习过了继承和多态,我们可以定义一个父类,还有诸多个子类,父类里面有子类的共同特性,子类可以继承父类,并且调用到父类的成员方法和成员变量,如果我们子类对父类的方法不满意时,可以在子类中重写父类的方法,这样在运行的时候,会产生动态绑定,会调用到子类重写的方法,这也就是多态。
但是,一个父类并不能很具体的表达出子类的需求,比如我要画一个图形,我们可以定义一个父类,然后有熊,鸭子,鱼三个子类,父类中可以定义一个shap方法,但是shape方法中,并不能明确知道要画什么图案,毕竟不能规定只画一种图案,这时,我们就可以不去实例化父类中shape方法,由子类自由的实例化每一个想要画什么图形的方法shap --- 此时父类就被定义为抽象类,而子类中的shape方法就为抽象方法
2.抽象类和抽象方法如何定义
抽象类和抽象方法的定义都要使用abstract关键字
抽象方法必须在抽象类中定义
下面是父类中的抽象方法shape,被abstract修饰的方法,就可以不实例化
如果一个类被abstract所修饰,那么这个类就成为抽象类,而一个普通类继承了抽象类,那么这个子类就必须要重写并实例化抽象类中的抽象方法
3.抽象类特征
1.抽象类也是属于类,它也可以定义普通成员变量和普通方法,子类也可以重写抽象类中的普通成员方法,运行是也会动态绑定,调用到子类重写抽象类中的方法,也会实现多态
2.抽象类可以没有抽象方法,但是抽象方法一定是在抽象类中创建的!!!
如果抽象方法在普通类中定义,那么就会报错
3.抽象方法不能被static final private所修饰,因为抽象类必须被继承,而抽象方法就必须被重写,如果抽象方法被static final private所修饰,那么就不能被重写,那么就这个抽象方法就没意义了
4.抽象类可以有构造方法,作用是为了通过子类调用构造方法初始化父类的成员变量
5.普通类继承了抽象类,那么普通类就必须实例化抽象类中的抽象方法
6.如果一个普通类A继承了抽象类B,但是这个普通类A又不想实例化抽象类B的抽象方法,那么可以将普通类A用abstract修饰,让A也成为抽象类,这样就可以不用实例化抽象类B中的抽象方法,但是如果又有一个普通类C继承了抽象类A,那么普通类C不仅仅要实例化抽象类B中的抽象方法,也必须要实例化抽象类A中的抽象方法。