跳至主要內容

Different

LincZero大约 1 分钟

Different

目录

抽象基类

抽象类

与C++不同

  • Java

    • public abstract class Person				// 抽象基类(关键字强制被声明,目的只是提高程序的清晰度)
      {
          ...
          public abstract String getDescription();// 抽象方法
      }
      
  • C++

    • 只要有一个纯虚函数,这个类就是抽象类。在C++中,没有提供用于表示抽象类的特殊关键字。

      class Person
      {
      public:
          virtual string getDescription() = 0;	// 纯虚函数
      }
      

接口与抽象基类

与C/C++不同

  • Java

    • Java有抽象基类,也有接口的概念
    • 在Java程序设计语言中,接口不是类,而是对类的一组需求描述,这些类要遵从接口描述的统一格式进行定义
  • C++

    • C++没有接口这的概念,不区分接口和纯虚基类 仅使用纯虚基类可以完成相同的需求
  • Python

    • 没有纯虚积累或接口,但是可以在基类中抛出一个没有被实现的异常,以迫使使用者去实现接口

      raise NotImplemented("This method has to be override in a child class")
      

与C++不同

观察者模式的实现细节上

  • C++
    • 观察者/监听器,继承一个观察者基类
    • 被观察者/触发者,包含一个观察者基类指针
  • 而Java则是
    • 观察者/监听器,接口实现一个观察者基类
    • 被观察者/触发者,包含一个观察者基类指针