JAVA_SE基础——44.抽象类的练习
抽象类要注意的细节:
1. 如果一个函数没有方法体,那么该函数必须要使用abstract修饰,把该函数修饰成抽象 的函数。。2. 如果一个类出现了抽象的函数,那么该类也必须 使用abstract修饰。
3. 如果一个非抽象类继承了抽象类,那么必须要把抽象类的所有抽象方法全部实现。
4. 抽象类可以存在非抽象方法,也可以存在抽象的方法.
5. 抽象类可以不存在抽象方法的。
6. 抽象类是不能创建对象的。
疑问:为什么抽象类不能创建对象呢?
因为抽象类是存在抽象方法的,如果能让抽象类创建对象的话,那么使用抽象的对象
调用抽象方法是没有任何意义的。
7. 抽象类是存在构造函数的,其构造函数是提供给子类创建对象的时候初始化父类的属性的。
练习:使用抽象类计算一个矩形与圆形的面积。
package day09; /* 需求: 描述一个图形、圆形、 矩形三个类。不管哪种图形都会具备计算面积 与周长的行为,但是每种图形计算的方式不一致而已。 */ //定义图形抽象类 abstract class Figure{ //定义带参构造方法 Figure(String name){ this.name = name ; } //定义String型的成员变量name String name ; //定义抽象方法getArea() public abstract void getArea(); //定义抽象方法getPerimeter() public abstract void getPerimeter(); } //定义圆(circle)类 并 继承 图形(Figure)类 class circle extends Figure{ //定义double型的成员变量r double r ; //定义double型的常量 PI ,并赋值3.14 static final double PI = 3.14 ; //定义带参构造方法 circle(String name,double r){ super(name); this.r = r ; } //实现抽象方法getArea() //定义计算圆的面积的方法 public void getArea(){ System.out.println(name+"的面积是"+PI*r*r); } //实现抽象方法getPerimeter() //定义计算圆的周长的方法 public void getPerimeter(){ System.out.println(name+"的周长是"+2*PI*r); } } //定义矩形(rectangle)类 并 继承 图形(Figure)类 class rectangle extends Figure{ //定义int型成员变量high int high ; //定义int型成员变量length int length ; //定义带参构造方法 rectangle(String name,int high,int length){ super(name); this.high = high ; this.length = length ; } //实现抽象方法getArea() //定义计算矩形的面积的方法 public void getArea(){ System.out.println(name+"的面积是"+high*length); } //实现抽象方法getPerimeter() //定义计算矩形的周长的方法 public void getPerimeter(){ System.out.println(name+"的周长是"+2*(high+length)); } } //定义测试类Demo1 public class Demo1 { //程序入口 public static void main(String[] agrs){ //创建circle类的实例对象,并赋值半径r=3 实例对象: 为对象创建空间并为其赋值 circle c = new circle("圆形",3); //调用计算圆面积的方法 c.getArea(); //调用计算圆周长的方法 c.getPerimeter() ; //创建rectangle类的实例对象,并赋值宽(high=2)长(length=4) rectangle r = new rectangle("矩形",2,4) ; //调用计算矩形面积的方法 r.getArea(); //调用计算矩形周长的方法 r.getPerimeter(); } }
运行结果: