抽象类是面向对象(下)中十分重要的内容,也是后面学习接口的基础,务必掌握扎实。大二初学java,若有错误,欢迎各位大佬批评指正,不胜感激!
抽象类:
概念:如果一个类没有足够的信息来描绘一个具体的对象,这样的类就是抽象类。
语法:Public abstract class 类名 abstract public 返回值类型+方法名
(1):定义了一个抽象父类Shape,分别定义了draw方法和getArea方法,抽象方法的修饰符不能是private修饰,也不能被final和static修饰,因为其抽象方法要被子类重写。下面定义了一个double类型的area变量。
【1】:抽象类必须被继承。
【2】:一个类继承了这个抽象类之后,这个普通类一定要重写这个抽象类中所有的抽象方法,否则子类也是抽象类,必须用abstract修饰。
【3】:抽象方法不能有方法体。
第11行代码:抽象类也是类,也可以有普通的方法和属性,甚至构造方法。
(2):定义了一个Rect子类,继承父类Animal,分别定义了一个length变量和width变量,然后给出了一个有参构造方法,通过this关键字引用。再重写draw方法打印矩形的基本信息,重写getArea方法返回矩形的面积。
(3):定义了一个Circle子类,继承父类Animal,同时定义了一个变量r,给出了一个有参构造方法,通过this关键字引用。重写draw方法打印圆的基本信息,再重写getArea方法,返回圆的面积。
(4):最后的测试类Test2,在main方法中 ,通过向上转型分别给出了一个rect和circle变量,注意:抽象类不能直接通过new关键字实例化对象,所以在此向上转型;并将其赋值,然后分别调用draw方法。之后调用getArea方法得到面积并打印语句。
(5):输出结果:
第18、19行代码:抽象类也是类,也可以有普通的方法和属性,甚至构造方法。
(6)抽象类的作用:
使用抽象类相当于多了一重编译器的校验,很多时候实际工作不应该由父类去完成,应该由子类去完成,那么如果此时我们不小心误用成父类了,使用普通编译器是不会报错的。但是父类是抽象类实例化就会报错,让我们尽早发现问题。