目录
1、什么是抽象类
抽象类,顾名思义就是抽象的。该类没有包含足够的信息去描绘一个具体的对象,这样的类称为抽象类。抽象类着一种优化了的概念组织方式,它是所有子类的公共属性的集合,抽象类用来描述对象的一般状态和属性,然后在子类中再去实现这些状态和行为,以适应对象的多态性。抽象类的出现,就是为了被继承。
概念也是比较抽象的,看图帮助理解八。
2、定义抽象类
在Java中,一个类如果被 abstract 修饰称为抽象类,抽象类中被 abstract 修饰的方法称为抽象方法,抽象方法不用给出具体的实现体。抽象类可以不完全抽象,可以包含一般方法。
抽象类语法:
abstract class 类名称 {
成员变量;
方法(){.........} //一般方法
抽象方法() ; //抽象方法,无方法体
}
代码如下
public abstract class Shape { abstract void draw(); void print(){ System.out.println("抽象类中的普通方法。。。。"); } }public class Triangle extends Shape{ @Override void draw() { System.out.println("画一个三角形....."); } }public class Test { public static void main(String[] args) { Triangle triangle =new Triangle(); triangle.draw();//打印结果:画一个三角形..... } }
3、抽象类特性
那么在使用抽象类的时候有什么需要注意的地方,一起往下看吧。
(1)抽象类不能直接实例化对象
Shape shape =new Shape();//Error Shape是抽象的,无法实例化对象
(2)抽象方法的修饰词不能是Private
public abstract class Shape { private abstract void draw(); }//Error
(3) 抽象方法不能被static 和 final修饰
abstract final void print();//Error 因为抽象方法需要被子类重写
(4) 抽象类被子类继承,子类必须重写父类中的抽象方法
(5)抽象类中不一定包含抽象方法,但有抽象方法的类一定是抽象类
(6) 抽象类中可以有构造方法,供子类创建对象时,初始化父类的成员变量
4、 抽象类的作用
多了一重编译器的校验。
抽象类本身不能被实例化, 要想使用, 只能创建该抽象类的子类. 然后让子类重写抽象类中的抽象方法.
UU们可能会说了, 普通的类也可以被继承呀, 普通的方法也可以被重写呀, 为啥非得用抽象类和抽象方法呢?
使用抽象类相当于多了一重编译器的校验.
很多语法存在的意义都是为了 "预防出错", 例如我们曾经用过的 final 也是类似. 创建的变量用户不去修改, 不就相当于常量了。 但是加上 final 能够在不小心误修改的时候, 让编译器及时提醒我们.
充分利用编译器的校验, 在实际开发中是非常有意义的.