现实世界中,人们表征世界时,会把现实世界中的很多类具有相同特征的事物归为一个抽象类。比如水果是许多植物果实的总称,我们可以定义一个苹果类、定义一个西瓜类,可以实例化一个苹果对象,可以实例化一个西瓜对象,我们也可以定义一个水果类,但是你无法实例化一个水果对象,因为水果的实例必定是某个具体的植物果实,这时候,水果类就是一个抽象类,水果类可以被苹果类继承扩展,可以被西瓜类继承扩展,这是水果类的唯一用途。

又比如,如果进行一个图形编辑软件的开发,就会发现问题领域存在着圆、三角形这样一些具体概念,它们是不同的,但是它们又都属于形状这样一个概念,形状这个概念在问题领域是不存在的,它就是一个抽象概念。正是因为抽象的概念在问题领域没有对应的具体概念,所以用以表征抽象概念的抽象类是不能够实例化的。

 

抽象类的定义形式:

一般格式如下:

abstract  class  类名{

   类体

   }

说明:

l  抽象类是不能直接实例化对象的类。也即抽象类不能使用new运算符去创建对象。

l  抽象类一般包括一个或几个抽象方法。所谓抽象方法需在abstract修饰符进行修饰,抽象方法只有方法的声明部分,没有具体的方法实现部分。抽象类的子类必须重写父类的抽象方法,才能实例子化,否则子类也是一个抽象类。

l    抽象类中不一定包含抽象方法,但是包含抽象方法的类必须说明为抽象类。

 

举例:Dog类继承于抽象类Animal。

abstract class  Animal{

  String   name;     

   Animal(Stringname){         //非抽象方法

    this.name=name;

   }

 void getname(){            //非抽象方法

       System.out.println("Animal's name is"+name);

  }

 abstract void  move();            //      抽象方法,用abstract 修饰

 }

class Dog extends Animal{

  intage;

 Dog(String name,int age){

         super(name);

         this.age=age;

  }

 void  move(){

         System.out.println("Dog  is running!");

  }

 void getage(){

       System.out.println("Dog is"+age+"  years  old");

  }

}

Public class AbstractDemo{

 public static void main(String args[]){

         Dogd=new Dog("wangwang",5);

         d.move();

         d.getname();

         d.getage();

 }         

}

 

程序运行结果:

Dog is  running!

Animal's name is wangwang

Dog is  5  years old

 

 

举例二、具有启动(startUp)方法的抽象车辆类Car,其每种具体子类都必须实现其自己的、专属于某种类型车辆的具体启动(startUp)方法

 

//定义抽象类Car

abstract class Car {

    //定义抽象方法startUp

    public abstract void startUp();

}

//定义抽象类Audi并使该类继承自Car

abstract class Audi extends Car{

    //定义抽象方法turbo

    public abstract void turbo();

}

//定义非抽象类Audi_A6继承自Audi

class Audi_A6 extends Audi{

    //实现startUp方法

    public void startUp()    {

       System.out.println("调用了奥迪A6的启动功能!!!");

    }

    //实现turbo方法

    public void turbo()  {

       System.out.println("调用了奥迪A6的加速功能!!!");

    }

}

//定义非抽象类Audi_A8继承自Audi

class Audi_A8 extends Audi{

    //实现startUp方法

    public void startUp(){

       System.out.println("调用了奥迪A8的启动功能!!!");

    }

    //实现turbo方法

    public void turbo(){

       System.out.println("调用了奥迪A8的加速功能!!!");

    }

}

public class AbstractClassDemo{

    public static void main(String[] args) {

       //创建Audi_A6对象并使该类引用a6指向该对象

       Audi_A6 a6=new Audi_A6();

       //调用Audi_A6对象中的方法

       a6.startUp();

       a6.turbo();

       //创建Audi_A8对象并使该类引用a8指向该对象

       Audi_A8 a8=new Audi_A8();

       //调用Audi_A8对象中的方法

       a8.startUp();

       a8.turbo();

    }

}

 

程序执行结果:

调用了奥迪A6的启动功能!!!

调用了奥迪A6的加速功能!!!

调用了奥迪A8的启动功能!!!

调用了奥迪A8的加速功能!!!

posted on 2015-12-01 09:30  一念了了  阅读(510)  评论(0编辑  收藏  举报