Java抽象类

1 什么是Java抽象类

用abstract关键字声明的类在Java中被称为抽象类。抽象类中可以包含抽象方法和非抽象方法。

在学习Java抽象类之前,让我们首先了解Java中的抽象。

2 Java中的抽象

抽象是隐藏实现细节并仅仅向用户提供功能的过程。

在现实生活中,我们也可以看到抽象的存在,例如,你在日常发生Email邮箱的过程中,我们只管输入邮箱的内容进行发送给对方,而不用关心Email邮件传输的内部细节。

抽象使你可以专注于对象的功能,而不是对象的细节。

3 实现抽象的方式

有两种方法可以在Java中实现抽象:

  1. 抽象类
  2. 接口

4 Java的抽象类

声明为abstract的类称为抽象类。抽象类可以包含抽象和非抽象方法。抽象类需要扩展并实现其方法。需要注意的是,抽象类是无法实例化的。

抽象类的一些要点:

  • 抽象类必须使用abstract关键字声明。
  • 抽象类可以包含抽象和非抽象方法。
  • 抽象类无法实例化。
  • 抽象类也可以包含构造函数和静态方法。
  • 抽象类可以包含final方法,这些final方法将限制子类无法更改方法的内容。

抽象类的语法:

abstract class A{}  

5 Java的抽象方法

声明为abstract且没有实现的方法称为抽象方法

5.1 抽象方法的语法

abstract void printStatus();//抽象方法是没有方法体的  

5.2 抽象方法的示例

在下面示例中,Bike是一个抽象类,仅包含一个抽象方法。它的实现由Honda类提供。

/**
 * 一点教程网 - http://www.yiidian.com
 */
abstract class Bike{
    abstract void run();
}
class Honda4 extends Bike{
    void run(){
        System.out.println("本田自行车在跑...");
    }
    public static void main(String args[]){
        Bike obj = new Honda4();
        obj.run();
    }
}  

输出结果为:

本田自行车在跑...

6 抽象类的实际应用1

在本示例中,Shape是抽象类,其实现由Rectangle和Circle类提供。

通常,我们不了解实现类(对最终用户隐藏),而实现类的对象由Factory方法提供。

Factory类中包含一个返回类的实例的工厂方法。后面章节我们再学习工厂方法的知识。

TestAbstraction1.java:

/**
 * 一点教程网 - http://www.yiidian.com
 */
abstract class Shape{
    abstract void draw();
}
//在实际情况下,实现是由其他人提供的,即对用户是未知的
class Rectangle extends Shape{
    void draw(){
        System.out.println("绘制长方形");
    }
}
class Circle1 extends Shape{
    void draw(){
        System.out.println("绘制圆形");
    }
}
//在实际情况下,方法是由程序员或用户调用的
class TestAbstraction1{
    public static void main(String args[]){
        Shape s=new Circle1();//在实际情况下,对象是通过方法(例如getShape() 方法)提供的  
        s.draw();
    }
}

输出结果为:

绘制圆形

7 抽象类的实际应用2

TestBank.java:

/**
 * 一点教程网 - http://www.yiidian.com
 */
abstract class Bank{
    abstract int getRateOfInterest();
}
class ICBC extends Bank{
    int getRateOfInterest(){
        return 7;
    }
}
class CCB extends Bank{
    int getRateOfInterest(){
        return 8;
    }
}

class TestBank{
    public static void main(String args[]){
        Bank b;
        b=new ICBC();
        System.out.println("贷款利率为: "+b.getRateOfInterest()+" %");
        b=new CCB();
        System.out.println("贷款利率为: "+b.getRateOfInterest()+" %");
    }
}

输出结果为:

贷款利率为: 7 %
贷款利率为: 8 %

 

推荐好课