菜鸟自学Java之“抽象类和抽象方法”

一、抽象类

抽象类属于Java类的高级特性,是一种特殊的类。抽象类用来提供更高级的类型抽象,在面向对象的程序设计语言中,类是有层次和继承关系的。子类总是比其父类更加具体。程序开发过程中,很多时候需要构造一系列的类及其继承关系,这时,通常会将类层次中共有的特性抽取出来,创建包含这些共有特性的抽象类,并由抽象类派生出更加具体、有更多实现的子类或后代类,形成一个完整的类的层次体系。

抽象类可能含有抽象方法,也可能没有,但抽象类中可以含有非抽象的方法。抽象类不能被实例化,不能使用new运算符创建抽象类的实例对象,但是抽象类可以派生子类。

abstract class 类名称{
    类体;
}

//如果一个类含有抽象方法,那么这个必须被声明为abstract

public abstract class Animal{
    //声明字段
    //声明非抽象方法
    abstract void eat();        //声明抽象方法
}

当从一个抽象类派生子类时,子类通常提供父类中所有抽象方法的实现。如果子类中没有实现其父类中所有的抽象方法,那么这类子类也必须被声明为abstract(抽象的)。——(如此,我认为这就有点像是C++中的所有静态函数的集合)。

二、抽象类实例

abstract class Animal{
    //声明被所有子类共享的成员变量
    String name;
    ……
    //声明已经实现的成员方法,可以被所有子类所共享
    void sleep();{
        ……
    }
    //声明抽象方法,由各个子类去具体实现
    abstract void run();
    abstract void eat();
}
//声明dog类,是抽象类Animal的子类
class dog extends Animal{
    //在子类中实现父类中声明的抽象方法,提供具体的实现
    void run (){
        ……
    }
    void eat (){
        ……
    }
}
//声明cat类,是抽象类Animal的子类
class cat extends Animal{
    //在子类中实现父类中声明的抽象方法,提供具体的实现
    void run (){
        ……
    }
    void eat (){
        ……
    }
}

在两个类中都实现了run()和eat(),但是他们的具体实现是可以不同的。这样就在抽象类Animal中提供了同一的对外接口,而在子类中去具体实现。——(我认为这就是C++静态成员函数的升级版,”静态类“)

三、抽象方法

abstract <方法返回值类型> 方法名称(参数列表);

eg:
    abstract void moveTo(int x, int y);

除了关键字abstract,其他声明与普通方法的声明相同。实际上,一个接口中的所有方法,隐含的都是抽象的,因此接口的方法可以不使用abstract修饰符。当然也可以使用,只不过不是必需的。

四、抽象类与接口

抽象类(abstract):提供部分方法的实现,其余的让子类来完成实现

接   口(interface):只包含抽象方法的声明

猜你喜欢

转载自blog.csdn.net/m0_37811192/article/details/81106570