06 java的抽像类与接口

在C++里,如果需要强迫派生类重新实现基类里的虚函数,可以在基类里只声明虚函数,但不实现函数体(即纯虚函数). 当一个类继承基类时就需要实现基类里声明虚函数,否则编译不通过.

class Animal {
public:
    virtual void eat() = 0; //没有函数体的虚函数就是纯虚函数了.
};

class Dog : public Animal { //当继承Animal类时,就必须在此类里实现所有Animal里的纯虚函数.
public:
    void eat() {
        cout << "dog eats" << endl;
    }
};

在java里把像C++纯虚函数同样功能的函数叫作抽像函数,而且具有抽像函数的类必须声明为抽像类.


abstract class Animal {  //具有抽像函数的类必须声明为抽像类
    abstract public void eat();
}

class Dog extends Animal {
    public void eat() { //同样的,在此类也里需要实现Animal类里的所有抽像函数,除非此类也声明为抽像类
        System.out.println("dog eats");
    }
}

public class Hello {

    public static void main(String[] args) {
        Animal a = new Dog(); //基类指针变量指向派生类对象
        a.eat(); //调用Dog的eat()函数

    }

}

java里的接口(interface)基实就一个只有只读的属性成员和抽像函数的类, 如:

// Animal接口
interface Animal {
    int num = 88;   
    final int age = 99; // final关键字相当于c++里的const,只读的意思。而且必须有初始值
    abstract public void eat();
    public void run();
}
//注意属性成员就算不带final关键字,编译器也是当作带了final来处理的.
// 函数声明不带abstract关键字,编译器也是当作带了abstract来处理,因接口里只能有只读的属性成员和抽像函数。

接口可以继承另一个接口来扩展功能, 如:

interface Animal {
    int num = 88;   
    abstract public void eat();
    abstract public void run();
}

interface Human extends Animal { //接口Human继承了Animal接口
    public void lie();
}

一个类不叫继承接口,叫实现(implements)接口. 而且可以实现多个接口,但只能继承一个类,也就是只能有一个父类.

interface Car {
    public void drive();
}

class Dog implements Human, Car { //Dog类实现了Human接口和Car接口

    public void eat() {
        System.out.println("dog eat");
    }

    public void run() {
        System.out.println("dog run");
    }

    public void drive() {
        System.out.println("dog drive");
    }

    public void lie() {
        System.out.println("dog lie");
    }
}


public class Main {
    public static void main(String[] args) {
        Dog d;

        d = new Dog();
        d.eat();
        d.run();
        d.drive();
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值