常见概念
虚方法与非虚方法
虚方法
面向对象编程中的一种概念;
它允许在继承关系中的子类重写(Override)父类的某个方法;
主要目的是实现多态性(Polymorphism),即允许不同的子类对象对同一消息作出不同的响应;
虚方法的主要特点和用途包括:
-
多态性:虚方法使多态成为可能,允许子类根据需要覆盖父类的行为。
-
灵活性:通过使用虚方法,代码可以在不修改现有代码的情况下扩展或修改行为。
-
接口一致性:即使子类有不同的实现,也能够保持对外部用户的统一接口。
-
代码复用:基类可以提供一些通用功能,而子类可以通过重写特定的方法来定制这些功能;
非虚方法
面向对象编程中的一种概念;
非虚方法是不能在派生类中被重写的方法;
也就是说,无论通过基类还是子类的指针或引用调用非虚方法,都将执行定义在基类中的那个版本;
方法 在编译期 就确定了 具体的版本 , 且 运行期 不可变,这样的方法就是 非虚方法;
非虚方法的主要特点和用途包括:
-
效率:非虚方法的调用通常比虚方法更快,因为编译器可以在编译时确定调用哪个方法。相比之下,虚方法需要在运行时查找实际类型的方法表来确定要调用的方法。
-
控制权:使用非虚方法可以确保始终执行特定版本的代码,不受子类的影响。这对于实现一些核心功能、访问保护或强制执行某些规则是有帮助的。
-
封装性:非虚方法可以帮助隐藏实现细节,并保持基类和子类之间的界限。这有助于减少耦合并提高代码的可维护性。
-
一致性:对于那些不希望或者不需要子类改变其行为的方法,使用非虚方法可以确保所有实例的行为一致。
-
安全:有时可能需要防止子类修改某些关键操作。将这些操作标记为非虚方法可以防止无意的覆盖或错误。
Java中非虚方法
static方法
静态方法属于类本身,而不是任何特定的对象实例,因此它们不能被子类覆盖
private方法
私有方法只能在其所属的类中访问,不能被其他类访问,包括其子类
final方法
构造器
每个类都有自己的实例构造器,用于初始化新创建的对象,这些构造器不能被子类重写或覆盖
动态类型语言与静态类型语言
根据 在编译期间如何处理变量类型 来区分(对 变量类型的检查 是在 编译期 还是 运行期);
静态类型语言
在编译期间就需要知道变量的数据类型,程序员通常需要显式地声明变量的类型。
这意味着在编写代码时,必须为每个变量指定其数据类型,例如 int x;
声明了一个整型变量 x
。
编译器会检查程序中的类型,并确保所有操作都是有效的,例如不允许将字符串与整数相加。这有助于在编译阶段捕获错误,提高程序的可靠性;
动态类型语言
在运行时确定变量的数据类型;
这意味着不需要在声明变量时指定类型,而是在程序运行时根据变量的值动态地决定它的类型。
例如在Python中,你只需要写 x = 10
就声明了一个整型变量 x
,而无需显式指定类型;