首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如果没有显式调用,Delphi调用是否在重写过程上继承

在Delphi中,如果没有显式调用,Delphi调用是否在重写过程上继承。

在Delphi中,重写(override)是一种面向对象编程的概念,允许子类重新实现父类的方法。如果没有显式调用重写方法,Delphi会自动调用父类的方法。

例如,假设我们有一个父类TParent和一个子类TChild,它们都有一个名为DoSomething的方法。在TChild中,我们重写了DoSomething方法,但是在TChild的实现中没有显式调用inherited关键字。

代码语言:delphi
复制
type
  TParent = class
  public
    procedure DoSomething; virtual;
  end;

  TChild = class(TParent)
  public
    procedure DoSomething; override;
  end;

procedure TParent.DoSomething;
begin
  // 父类的实现
end;

procedure TChild.DoSomething;
begin
  // 子类的实现
end;

在这种情况下,如果我们创建一个TChild对象并调用DoSomething方法,Delphi会自动调用父类的DoSomething方法,因为我们没有显式调用inherited关键字。

代码语言:delphi
复制
var
  Child: TChild;
begin
  Child := TChild.Create;
  try
    Child.DoSomething; // 调用父类的DoSomething方法
  finally
    Child.Free;
  end;
end;

因此,如果没有显式调用,Delphi调用是否在重写过程上继承,答案是:是的,Delphi会自动调用父类的方法,除非显式调用inherited关键字。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Dart的语法详解系列篇(三)-- mixin入门详解一、继承歧义

如果A中有一个方法B和C中已经重写,而D没有重写它,那么D继承的方法的版本是B,还是C? 如下图所示: ?...如果虚拟继承和非虚拟继承是混合的,那么只有一个虚拟A,对于每个到A的非虚拟继承路径,都有一个非虚拟A。C++需要地声明要使用的特性是从哪个父类调用的(例如:Worker::Human.Age)。...C++不支持的重复继承,因为没有办法限定要使用哪个超类(例如:一个派生列表[class Dog : public Animal, Animal]中出现一个类不止一次)。...如果一个结构体D嵌入两种结构体B和C(这两个结构体都有一个方法F()),从而满足接口A,那么如果调用D.F(),或者如果D的实例被分配给类型A.B和C的变量,则编译器将会提示ambiguous selector...然而,即使当多个接口声明相同的方法签名时,只要该方法继承链中的任何位置实现(定义),它就会覆盖该方法在其链中的任何实现(它的超类中)。因此,继承链的任何给定级别上,任何方法最多只能有一个实现。

1.8K10

vc++菜鸟教程_vc6.0使用教程详解

Delphi中,TComponent是所有VCL构件的基础。编写非可视构件以便从TComponent派生。...,TWinControl的子类型 则用于窗口控件。...关于简单控件的编写,一般只需要从Delphi为你准备好的基本构件类型继承下来,然后重写父类的一些方法,添加自己的一些方法,以及属性就可以了.你还可以学Delphi一样写出一些抽象构件类型来, 比如说上面的...与Notification方法一样,使用时,新的构件里覆盖掉Loaded方法,然后Loaded方法里写上载入完毕的代码就可以了; Updating方法:当一个构件正在被改变时,被调用;...属性:控制状态,如鼠标按下,是否接受调色板更改信息,是否接受焦点等; ControlStyle属性:控制类型,如是否透明,是否有3D Frame等等; Paint方法:该方法接受到

1.6K10
  • D语言的陷阱

    其中值得一提的是它的虚方法调用机制师从于Java。俺所说的是DOOP的理解。  现代编程语言基本都提供了OOP的编程机制,即封装,继承和多态。先声明一下,在这里我们讨论的主要是语言层面的OOP。...我们注意到两个示例有点小小的不同,就是示例6有重载方法,而示例7则没有。Bingo!原因就在于此。D认为如果你要重载父类的方法,就必须的声明它。...因此,D编译器在编译代码之前,会分析子类是否overridden父类的虚方法。如果没有,则编译成非虚方法。这样做的好处是不用再考虑应该把哪个方法设置为虚方法了,坏处是可能造成设计的不清晰和滥用。...接口实际只是为一组方法签名指定一个名称的方式。这些方法根本不带任何实现。但是继承接口与继承父类截然不同。继承接口必须实现接口方法,而继承父类则不必实现。... * 但是调用不到这个方法.  */  alias A.Method Method;  /*  * 这个方法到底是谁的实现  * 遗憾的是D还没有提供接口实现的特性  * 所以目前不能区分到底实现的哪个接口方法

    62010

    Java入门必背100条

    意味着,我们调用局部变量之前,一定要赋值。特别地:形参调用时,我们赋值即可。...但是如果使用的是xxx子包下的结构,则仍需要导入。...子类继承父类以后,就获取了直接父类以及所有间接父类中声明的属性和方法。 54、如果没有的声明一个类的父类的话,则此类继承于java.lang.Object类。...③特殊情况:当子类重写了父类中的方法以后,想在子类的方法中调用父类中被重写的方法时,则必须的使用”super.方法”的方式,表明调用的是父类中被重写的方法。...60、子类对象实例化过程: 从结果看:子类继承父类以后,就获取了父类中声明的属性或方法,创建子类的对象,就会在堆空间中加载父类中声明的属性。

    1K20

    【JavaSE学习】 Day5JavaSE面向对象(中)看这三篇就够了

    或 overwrite) 应用 举例 重写的规则 方法的重写和重载的区别 三、super关键字 super调用属性、方法 super调用构造器 四、子类对象实例化全过程 继承性 从过程看 强调说明...间接继承的父类称为:间接父类 子类继承父类以后,就获取了直接父类以及所间接父类中声明的属性和方法 图示  java.lang.Object类的理解  如果我们没的声明一个类的父类的话,则此类继承于...特殊情况:当子类重写了父类中的方法以后,我们想在子类的方法中调用父类中被重写的方法时,则必须的使用"super.方法"的方式,表明调用的是父类中被重写的方法。...super调用构造器 我们可以子类的构造器中的使用"super(形参列表)"的方式,调用父类中声明的指定的构造器 "super(形参列表)"的使用,必须声明子类构造器的首行!  ...我们类的构造器中,针对于"this(形参列表)"或"super(形参列表)"只能二一,不能同时出现 构造器的首行,没的声明"this(形参列表)"或"super(形参列表)",则默认调用的是父类中空参的构造器

    65020

    来了来了它来了,100条必背JAVA知识点(下)

    ③特殊情况:当子类重写了父类中的方法以后,想在子类的方法中调用父类中被重写的方法时,则必须的使用"super.方法"的方式,表明调用的是父类中被重写的方法。...54、super调用构造器: ①我们可以子类的构造器中的使用"super(形参列表)"的方式,调用父类中声明的指定的构造器。 ②"super(形参列表)"的使用,必须声明子类构造器的首行!...④构造器的首行,没的声明"this(形参列表)“或"super(形参列表)”,则默认调用的是父类中空参的构造器:super()。...55、子类对象实例化过程: 从结果看:子类继承父类以后,就获取了父类中声明的属性或方法,创建子类的对象,就会在堆空间中加载父类中声明的属性。...③如果子类(或实现类)继承的父类和实现的接口中声明了同名同参数的默认方法,那么子类重写此方法的情况下,默认调用的是父类中的同名同参数的方法。–>类优先原则。

    67710

    混合设计“类”

    ,虽然有些语言不支持类,但是这不妨碍程序员去模拟类行为 如果你之前接受过正规的编程教育的话,可能听说过过程化编程,这种代码只包含过程 (函数)调用没有高层的抽象。...这就是我所说的多态。还记得吗,之前的伪代码中对应的语句是 inherited:drive(),我们称之为相对多态。 JavaScript( ES6 之前;参见附录 A)并没有相对多态的机制。...混入是 JavaScript 中一个很棒的机制,不过它的功能也没有看起来那么强大。...如果你向目标对象中混入超过一个对象,就可以部分模仿多重继承行为,但是仍没有直接的方式来处理函数和属性的同名问题。...再生继承 混入模式的一种变体被称为“寄生继承”,它既是的又是隐的,主要推广者是Douglas Crockford。

    18220

    C++一分钟之-继承与多态概念

    继承:站在巨人的肩膀概念继承允许我们定义一个类(派生类)从另一个类(基类)那里继承属性和方法。这样做可以复用现有类的代码,同时新类中添加或修改功能,实现代码的重用和扩展。...记住,只有公有和保护成员才能被继承。构造函数与析构函数:基类的构造函数和析构函数不会自动被调用,需要调用或使用初始化列表。菱形问题:多重继承时可能出现同一基类被多次继承的情况,导致资源重复。...使用虚继承可以解决此问题。如何避免明确成员的访问权限,尽量使用保护成员来传递数据。派生类构造函数中,使用初始化列表显调用基类的构造函数。多重继承时考虑菱形问题,适时使用virtual关键字。...常见问题与易错点忘记使用virtual关键字:如果基类中的函数没有声明为虚函数,派生类即使重写了该函数,也无法实现动态绑定。切片问题:当将派生类对象赋值给基类对象时,派生类特有的部分会被“切片”掉。...空指针调用虚函数:对空指针调用虚函数会导致运行时错误。如何避免确保需要被重写的函数声明为虚函数。使用引用或指针处理基类和派生类的关系,避免切片问题。调用虚函数前检查指针是否为空。

    11310

    【Java不看后悔系列】|面向对象编程|

    子类可以直接调用继承而来的方法。 子类可以重写(override)父类的方法,以提供特定于子类的实现。 构造方法: 如果子类没有定义构造方法,它会默认调用父类的无参构造方法(如果父类有的话)。...Java中,当你子类中创建构造函数时,通常需要调用超类的构造函数,使用super关键字来实现。...如果在子类构造函数中没有调用超类构造函数,Java将隐插入对超类默认(无参)构造函数的调用。...值得注意的是,如果超类没有默认构造函数,并且子类构造函数中没有调用超类构造函数,那么将会引发编译错误。...设计: final 方法和类可以阻止子类修改其行为,这有助于确保一些设计的意图。 需要注意的是,final 并不是总是必需的,而是根据设计需要和代码安全性来决定是否使用。

    14010

    Classes (类)

    子类对继承到的一个方法进行“重写”,不会影响父类中的方法,这两个方法互不影响,因此才能使用相对多态引用访问父类中的方法(如果重写会影响父类的方法,那重写之后父类中的原始方法就不存在了,自然也无法引用)。...# 混入 function mixin (sourceObj, targetObj) { for (var key in sourceObj) { // 如果目标对象中不存在该属性,则添加...JavaScript( ES6 之前)并没有相对多态的机制。所以,由于 Car 和 Vehicle 中都有 drive() 函数,为了指明调用对象,必须使用绝对(而不是相对)引用。...通过名称指定 Vehicle 对象并调用它的 drive() 函数。...实际如果必须使用一个复杂的库或者函数来实现这些细节,那就标志着你的方法是有问题的或者是不必要的。 # 寄生继承 混入模式的一种变体被称为“寄生继承”,它既是的又是隐的。

    25120

    Java代码块执行顺序初探

    如果没有地为类定义构造方法,Java编译器将会为该类提供一个默认构造方法。 若定义了有参构造方法,编译器将不会提供默认的无参构造,如需要,需要自己构造。...Java继承中对构造函数是不继承的,只是或者隐调用。...,只是或者隐调用,并且必须是构造函数第一行。...这里是隐调用了super()。 子类不能继承父类的构造器(构造方法或者构造函数),但是父类的构造器带有参数的,则必须在子类的构造器中地通过super关键字调用父类的构造器并配以适当的参数列表。...如果你想要调用父类的静态方法和属性,直接通过父类名.方法或变量名完成,至于是否继承一说,子类是有继承静态方法和属性,但是跟实例方法和属性不太一样,存在"隐藏"的这种情况。 2).

    2.7K10

    Lombok 有哪些坑 ?

    大部分 pojo 我们是不会调用 equals 进行比较的,实际用到时再重写即可。 去掉 callSuper=true。如果父类是 Object,推荐使用。...由于 @data 实际就是用的 @EqualsAndHashCode,没有调用父类的 equals(),当我们需要比较父类属性时,是无法比较的。...3.2 解决方法 用了 @data 就不要有继承关系,类似 kotlin 的做法,具体探讨见下一节 自己重写 equals(),lombok 不会对重写的方法进行生成 使用 @EqualsAndHashCode...lombok 会以指定的为准。...3.3 关于@data和data 了解了 @data 的行为后,会发现它和 kotlin 语言中的 data 修饰符有点像:都会自动生成一些方法,并且继承也有问题——前者一旦有继承关系就会踩坑,而后者修饰的类是

    4.2K20

    Delphi类型和引用

    事实Delphi中所有的元件都是从一些共同的祖先类 继承下来的,利用类的可继承性,您可以编写您自己的类元件,并把它加到Delphi的环境中去。...举例说明,我们Delphi的可视环境下 建立一个表单窗口时,它实际是创建了一个从TForm类中继承下的类类型。如果仔细看Delphi为您生成 的代码,你可以完全看到上面的各个规则是如何被实现的。...注意:尤其是熟悉C++的程序员要注意,C++中,当您用一个类类型声明一个对象时,将自动调 用类的构造函数(这也是C++中一般不需要调用构造函数的原因),而在object Pascal中,当您声 明了一个类类型的变量...如果在类来引用构造中的过程中发生了异常,程序将自动调用析构来删除还没有完全创建好的对象实例。...如果两者相同,那就什么也不需要干。 从语法,可以没有Write子句,这时候属性就是"只读"的。只读的属性Delphi中是常见的,只读的 属性不能被修改。

    2.5K30

    全面理解Java中继承关系

    如果子类中的实例变量被私有了 ,其父类中的同名实例变量没有被私有,那么子类对象就无法直接调用该变量,但可以通过先将对象变量强制向上转型为父类型,通过该对象引用变量来访问那个实例变量,就会得到的是父类中的那个实例变量...Java中,每个类都会默认继承Object超类,所以每一个构造方法的第一条默认语句都是super() 如果父类没有无参构造,反而有其他的有参构造方法时,子类继承父类后,子类必须的创建构造器,不论子类的构造器是否和父类构造器中参数类型是否一致...,都必须在子类的构造器中的通过super关键字调用和父类构造器相应参数的构造方法。...     System.out.println("子类可以创建其他类型构造器,但是必须的用super调用父类构造器")  } } 也可以使用this先调用子类中的构造方法,再间接调用父类中的有参构造方法...,子类继承父类,子类中的构造器方法类型可以和父类中的构造器不同,但是必须每个构造器都的使用super关键字调用父类中的某个有参构造器,也可以使用this调用子类中的某个有参构造器,但这个有参构造器必须通过

    1.4K00

    「JAVA」面向对象三大特征:封装、继承、多态,以高内聚、低耦合为目标

    (Override)两者只是名字比较接近,其本身并没有关系。...子类初始化过程中会创建子类对象,但在创建子类对象之前,会先创建父类对象;也就是说调用子类构造器之前,子类构造器中会先调用父类的构造器,如果没有调用父类构造器,那么默认情况下会隐调用父类无参数构造器...super关键字用于调用父类方法、构造器和字段;可以使用super解决子类隐藏了父类的字段情况; 子类方法中,调用父类被覆盖的方法; 子类构造器中,调用父类构造器。...也就是必须要先有父类对象,而后才会有子类对象; 如果父类没有提供无参数构造器,子类就必须地通过super语句去调用父类带参数的构造器。...子类对象初始化过程中,必须先调用父类构造器,而后再调用子类构造器。

    1K40

    JavaSE继承和多态

    this关键字和super关键字,因为静态方法不与对象进行绑定(不传入对象地址,无法操作指定对象) 2、子类构造 继承中子类对象构造时,需要先调用基类构造方法,然后执行子类的构造方法 注意: 若父类定义无参或者默认的构造方法...,子类构造方法第一行默认有隐含的super()调用,即调用基类构造方法 如果父类构造方法是带有参数的,此时需要用户为子类定义构造方法,并在子类构造方法中选择合适的父类构造方法调用,否则编译失败...、构造方法都不能被重写 重写的方法, 可以使用 @Override 注解来指定,可以校验是否重写了父类函数 重写和重载的区别: 区别点 重写(override) 重载(override) 参数列表...构造方法没有多态性,构造器中调用方法(如果这个方法被子类重写, 就会触发动态绑定, 但是此时子类对象还没构造完成), 可能会出现一些隐藏的但是又极难发现的问题 cat = (Cat)animal;...代码的运行效率降低 属性没有多态性,当父类和子类都有同名属性的时候,通过父类引用,只能引用父类自己的成员属性 构造方法没有多态性,构造器中调用方法(如果这个方法被子类重写, 就会触发动态绑定, 但是此时子类对象还没构造完成

    29020

    Python编程思想(27):类的继承

    如果在定义一个 Python类时并未指定这个类的直接父类,则这个类默认继承 object类。因此,object类是所有类的父类,要么是其直接父类,要么是其间接父类。...使用未绑定方法调用重写的方法 如果在子类中调用重写之后的方法,Python总是会执行子类重写的方法,不会执行父类中被重写的方法。如果需要在子类中调用父类中被重写的实例方法,那该怎么办呢?...所以,即使是实例方法,Python也允许通过类名调用。区别在于,通过类名调用实例方法时,Python不会为实例方法的第1个参数self自动绑定参数值,而是需要程序绑定第一个参数self。...后面的代码通过调用 Base_Class 中的name方法,并为第1个参数self绑定参数值,这就实现了调用父类中被重写的方法。 5....通过这种方式,Manager类重写了父类的构造方法,并在构造方法中调用了父类的两个构造方法执行初始化,这样两个父类中的实例变量都能被初始化。

    1.3K10

    java基础之继承(一)

    System.out.println("hello base"); } } public class Child extends Base { //子类通过super关键字调用...public void show(){ super.sayHello(); } } 那如果我们想要调用子类中的其他的构造方法该怎么办呢?...函数的重载可能和继承关系并不大,但方法的重写继承关系密切。...总结一下:方法的重载,方法与方法之间是不一样的,而方法的重写实际是一种方法的覆盖,子类覆盖父类的方法使父类方法子类中不可见(实际是可以使用super调用的,本节暂时不讨论)。...被final修饰的方法表示此方法在被子类继承之后是不允许重写的,例如有些方法不希望被子类重写修改就可以使用final修饰他,java中常量也是使用final来修饰的,例如:public final String

    53180
    领券