java的抽象类

时间:2023-03-08 21:59:22
java的抽象类

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

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

抽象类的定义形式:

一般格式如下:

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的加速功能!!!