抽象类与抽象方法
- 什么是抽象类:
随着继承层次中一个个新子类的定义,类变得越来越具体,而父类则更一 般,更通用。类的设计应该保证父类和子类能够共享特征。有时将一个父 类设计得非常抽象,以至于它没有具体的实例,这样的类叫做抽象类。
- 用abstract关键字来修饰一个类,这个类叫做抽象类。
- 用abstract来修饰一个方法,该方法叫做抽象方法。
- 抽象方法:只有方法的声明,没有方法的实现。以分号结束: 比如:public abstract void talk();
- 含有抽象方法的类必须被声明为抽象类。
- 抽象类不能被实例化。抽象类是用来被继承的,抽象类的子类必须重 写父类的抽象方法,并提供方法体。若没有重写全部的抽象方法,仍为抽象类。
- 不能用abstract修饰变量、代码块、构造器;
- 不能用abstract修饰私有方法、静态方法、final的方法、final的类。
抽象类举例 class void A { abstract void m1(); public void m2() { System.out.println("A类中定义的m2方法"); } } class B extends A { void m1() { System.out.println("B类中定义的m1方法"); } } public class Test { public static void main(String args[]) { A a = new B(); a.m1(); a.m2(); } }
作用:
抽象类是用来模型化那些父类无法确定全部实现,而是由其子类提 供具体实现的对象的类。
抽象类的特点:
A:抽象类和抽象方法必须用abstract关键字修饰
B:抽象类中不一定有抽象方法,但又抽象方法的类一定是抽象类
C:抽象类不能实例化 因为它不是具体的。抽象类又构造方法,但是不能实例化?构造方法的作用是什么呢?用于子类访问父类数据的初始化
D:抽象的子类
a:抽象类的子类是一个抽象类
b:重写所有的抽象方法,这个时候子类是是一个具体的类
抽象类的实例化其实是靠具体的子类实现的是多态的方式
Animal a = new Cat();
抽象类的成员特点:
成员变量:既可以是变量,也可以是常量
构造方法:有用于子类访问父类数据的初始化
成员方法:既可以是抽象的,也可以是非抽象的。
抽象类的成员方法特性:
A:抽象方法强制要求子类做的事情