C/C++、Java、Go、Python总结对比24-抽象类和方法

它时一个去除对象中不重要的细节的过程,只有那些描述了对象的本质特征的关键点才被保留。例如:苹果、香蕉,普通,桃子等。它们的共同特征就是水果。得出水果概念的过程,就是一个抽象的过程。

抽象类和方法的目的就是把多个类的共有属性拿出来,单独作为一个类来让其他类去继承。

抽象类在什么情况下比较适用

需要运用多态,并且某些方法在子类中必须重定义时。

下面看下各个语言的写法:

c++的写法

#include <iostream>
#include <string>

using namespace std;

//定义抽象类Animal
class Animal
{
public:
    virtual void getName() = 0;  //定义纯虚函数
};

//继承抽象类
class Dog : public Animal
{
public:
    void getName()
    {
        cout<<"Dog name is dog\n";
    }
};

class Cat : public Animal
{
public:
    void getName()
    {
        cout<<"Cat name is cat\n";
    }
};

//传入的Animal类型,实现多态
void getName(Animal* p)
{
    p->getName();
}

int main()
{
    Dog dog;
    Cat cat;

    getName(&dog);
    getName(&cat);

    return 0;
}

java的写法

Animal .java

package abstractclass;

//定义抽象类和抽象方法
public abstract class Animal {
    public abstract void getName();
}

Cat .java

package abstractclass;

//继承抽象类和重写抽象方法
public class Cat extends Animal {
    public void getName() {
        System.out.println("Cat name is cat");
    }
}

Dog .java

package abstractclass;

public class Dog extends Animal {
    public void getName() {
        System.out.println("Dog name is dog");
    }
}

Main .java

package abstractclass;

public class Main {
    public static void main(String[] args) {
        Dog dog = new Dog();
        Cat cat = new Cat();

        getName(dog);
        getName(cat);
    }

    public static void getName(Animal animal) {
        animal.getName();
    }
}

python的写法

import abc

class Animal:
    @abc.abstractmethod
    def get_name(self):
        pass


class Dog(Animal):
    def get_name(self):
        print("Dog name is dog")


class Cat(Animal):
    def get_name(self):
        print("Cat name is dog")


def get_name(animal):
    animal.get_name()


if __name__ == "__main__":
    dog = Dog()
    cat = Cat()

    get_name(dog)
    get_name(cat)

对比总结:

  1. 抽象类不能被实例化,只能被继承,然后继承类实例化;
  2. c++通过定义virtual修饰的函数来实现抽象类;
  3. java通过abstract来实现抽象类和方法,如果类中至少存在一个抽象函数,则该类必须声明为抽象类,即函数和类前都必须用abstract修饰;
  4. python需要借助abc模块来实现抽象类;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值