← 返回首页
JavaSE系列教程(二十八)
发表时间:2020-01-05 15:49:35
讲解abstract关键字,抽象类和抽象方法。

在java中,abstract关键通常用来修饰方法和类。

1.什么是抽象方法

没有方法体的方法称为抽象方法。

例如:

public void fn(); //该方法定义中没有方法体。

2.什么是抽象类

使用abstract修饰的类就是抽象类

例如:

public abstract class Animal{

}

抽象类有以下特征: 1)抽象不能实例化,只能实例化抽象类的子类(前提条件是子类也不能是抽象类)。 2)有抽象方法的类一定是抽象类。 3)抽象类不一定有抽象方法。 4)抽象可以有构造方法。 5)抽象类通常用来描述一个抽象的概念。结合子类表示了,xxx is a xxx的概念。

3.如何正确的使用抽象类

例如以下概念: 狗是动物,所以动物是抽象类,狗是动物的子类。 苹果是水果,所以水果是抽象类,苹果是水果的子类。 三角形是形状,所以形状是抽象类,三角形是形状的子类。 ...

实现代码如下:

//////////////////////////////////////////////
//动物类
public abstract class Animal{
   //动物吃饭的抽象方法
   public abstract void eat(); //有抽象方法的类,一定是抽象类。
}

//狗狗类
public class Dog extends Animal {
    //方法重写
    @Override
    public void eat() {
        System.out.println("啃骨头...");
    }
}
//狗是动物,所以动物是抽象类,狗是动物的子类。

///////////////////////////////////////////////
//水果类
public abstract class Fruit{

}
//苹果类
public class Apple extends Fruit{

} 
//苹果是水果,所以水果是抽象类,苹果是水果的子类。

//////////////////////////////////////////////
//形状类
public abstract class Shape{
   //求形状的周长
   public abstract double getCircle();
   //求形状的面积
   public abstract double getArea();
}

//三角形类
public class Triangle extends Shape {

    int a,b,c;

    Triangle (int a,int b,int c){
        this.a = a;
        this.b = b;
        this.c = c;
    }

    //判断是否构成三角形
    public  boolean isTrigle(){
        if(a+b<=c||a+c<=b||b+c<=a){
            System.out.println("不构成三角形");
            return false;
        }
        return true;
    }

    //方法重写
    @Override
    public double getArea() {
        if(this.isTrigle()) {
            double p = (a + b + c) / 2.0;
            return Math.sqrt(p * (p - a) * (p - b) * (p - c));//海伦公式计算三角形面积
        }else{
            return -1;
        }
    }

    //方法重写 
    @Override
    public double getCircle() {
        if(this.isTrigle()) {
            return a + b + c;
        }else{
            return -1;
        }
    }
}
//三角形是形状,所以形状是抽象类,三角形是形状的子类。

小结:

1)abstract可以用来修饰方法和类。

2)abstract修饰方法,表示是抽象方法,抽象方法没有方法体。

3)abstract修饰类,表示是抽象类,抽象类不能实例化。

4)抽象类通常描述一些抽象的概念,集合子类表达了 xxx is a xxx 的概念。