常见概念

发布时间 2023-12-11 15:47:51作者: anpeiyong

虚方法与非虚方法

虚方法

  面向对象编程中的一种概念;

  它允许在继承关系中子类重写(Override)父类的某个方法

  主要目的是实现多态性(Polymorphism),即允许不同的子类对象对同一消息作出不同的响应;

 

虚方法的主要特点和用途包括

  1. 多态性:虚方法使多态成为可能,允许子类根据需要覆盖父类的行为。

  2. 灵活性:通过使用虚方法,代码可以在不修改现有代码的情况下扩展或修改行为

  3. 接口一致性:即使子类有不同的实现,也能够保持对外部用户的统一接口

  4. 代码复用:基类可以提供一些通用功能,而子类可以通过重写特定的方法来定制这些功能;

 

非虚方法

  面向对象编程中的一种概念;

  非虚方法是不能在派生类中被重写的方法

  也就是说,无论通过基类还是子类的指针或引用调用非虚方法,都将执行定义在基类中的那个版本;

  方法 在编译期 就确定了 具体的版本 , 且 运行期 不可变,这样的方法就是 非虚方法;

 

非虚方法的主要特点和用途包括

  1. 效率:非虚方法的调用通常比虚方法更快,因为编译器可以在编译时确定调用哪个方法。相比之下,虚方法需要在运行时查找实际类型的方法表来确定要调用的方法。

  2. 控制权:使用非虚方法可以确保始终执行特定版本的代码,不受子类的影响。这对于实现一些核心功能、访问保护或强制执行某些规则是有帮助的。

  3. 封装性:非虚方法可以帮助隐藏实现细节,并保持基类和子类之间的界限。这有助于减少耦合并提高代码的可维护性。

  4. 一致性:对于那些不希望或者不需要子类改变其行为的方法,使用非虚方法可以确保所有实例的行为一致。

  5. 安全:有时可能需要防止子类修改某些关键操作。将这些操作标记为非虚方法可以防止无意的覆盖或错误。

 

Java中非虚方法

  static方法

    静态方法属于类本身,而不是任何特定的对象实例,因此它们不能被子类覆盖

  private方法

    私有方法只能在其所属的类中访问,不能被其他类访问,包括其子类

  final方法

  构造器

    每个类都有自己的实例构造器,用于初始化新创建的对象,这些构造器不能被子类重写或覆盖

 

动态类型语言与静态类型语言

  根据 在编译期间如何处理变量类型 来区分(对 变量类型的检查 是在 编译期 还是 运行期);

静态类型语言

  在编译期间需要知道变量的数据类型,程序员通常需要显式地声明变量的类型

  这意味着在编写代码时,必须为每个变量指定其数据类型,例如 int x; 声明了一个整型变量 x

  编译器会检查程序中的类型,并确保所有操作都是有效的,例如不允许将字符串与整数相加。这有助于在编译阶段捕获错误,提高程序的可靠性;

动态类型语言

  在运行时确定变量的数据类型

  这意味着不需要在声明变量时指定类型,而是在程序运行时根据变量的值动态地决定它的类型。

  例如在Python中,你只需要写 x = 10 就声明了一个整型变量 x,而无需显式指定类型;