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

将对非重写派生类方法的方法引用传递到其基类是否合法且已定义?

将对非重写派生类方法的方法引用传递到其基类是合法且已定义的。

当一个派生类继承自基类时,派生类会继承基类的所有方法,包括非重写的方法。在某些情况下,我们可能希望通过方法引用来调用基类中的非重写方法。

在Java中,可以通过使用基类的引用来引用派生类对象,然后通过该引用来调用基类中的非重写方法。这是因为派生类的对象实际上也是基类的一个实例。通过该引用调用的方法将在基类中被执行。

这种用法可以增加代码的灵活性和可维护性。例如,当基类的方法发生变化时,只需要更改基类的实现,而不需要修改派生类。

下面是一个示例代码:

代码语言:txt
复制
class BaseClass {
    public void nonOverriddenMethod() {
        System.out.println("This is a non-overridden method in the base class.");
    }
}

class DerivedClass extends BaseClass {
    @Override
    public void nonOverriddenMethod() {
        System.out.println("This method is overridden in the derived class.");
    }
}

public class Main {
    public static void main(String[] args) {
        BaseClass base = new DerivedClass();
        base.nonOverriddenMethod(); // Output: "This method is overridden in the derived class."
    }
}

在这个例子中,派生类DerivedClass重写了基类BaseClass中的方法nonOverriddenMethod()。然后,我们创建了一个基类引用base,并将其指向一个派生类对象。通过该引用调用nonOverriddenMethod()时,将执行派生类中重写的方法。

这里没有提及云计算、IT互联网领域的名词,如需了解更多相关内容,可以参考腾讯云的文档:腾讯云官方文档

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

相关·内容

C#基础知识系列七(base、this、new、override、abstract、virtual、static)

base关键字 base 关键字用于在派生类中实现对公有或者受保护成员访问,但是只局限在构造函数、实例方法和实例属性访问器中: 调用上已被其他方法重写方法。...Name, int Age) { this.Name = Name; this.Age = Age; } } 将对象作为参数传递其他方法...2.用abstract定义不一定包含抽象方法,也可以包含抽象方法。 3.abstract定义方法一定包含在抽象中。...virtual使用会有两种情况: 情况1:在定义了virtual方法,但在派生类中没有重写该虚方法。那么在对派生类实例调用中,该虚方法使用定义方法。...情况2:在定义了virtual方法,然后在派生类中使用override重写方法。那么在对派生类实例调用中,该虚方法使用是派生重写方法

64520

C# .NET面试系列二:面向对象

重写涉及派生类之间关系,方法派生类中被重新实现。重载是编译时多态性,根据调用时提供参数类型来确定调用哪个方法重写是运行时多态性,根据对象实际类型来确定调用哪个方法。...重写(Override):重写指的是在派生类中实现一个与方法(使用 virtual 关键字声明方法)具有相同签名方法重写允许派生类提供自己实现,覆盖方法。...重写要求在派生类中使用 override 关键字,确保方法签名和方法相同。重写用于实现多态性,允许在运行时使用派生类实际类型来调用方法。...使用重写时,关注派生类之间关系,派生类提供对中虚方法新实现。...只有当你需要在不同应用程序域、进程或计算机之间传递对象实例时,或者需要将对象持久化磁盘或数据库时,才需要考虑序列化。19.

22910
  • 硬核 | C++ 基础大全

    重写 翻译自 override,派生类中重新定义中除了函数体外完全相同虚函数,注意被重写函数不能是 static ,一定要是虚函数,其他一定要完全相同。...重定义(隐藏) 派生类重新定义中相同名字 virtual 函数,参数列表 和返回类型都可以不同,即父中除了定义成 virtual 完全相同同名函数才 不会被派生类同名函数所隐藏(重定义...,也称为某个派生类 查看派生类是否重写虚函数, 如果有,就替换成已经重写虚函数地址;查看派生类是否有自身虚函数,如果有,就追加自身虚函数到自身虚函数表中。...在析构函数中也是同理,派生类执行了析构函数后,派生类自身成员呈现未定义状态,那么在执行析构函数中是不可能调用到派生类重写方法。...,定义友元或者通过传递参数方式来实现; is-A,继承关系,关系具有传递性; 继承相关概念 所谓继承就是一个继承了另一个属性和方法,这个新包含了上一个属性和方法,被称为子类或者派生类

    1.2K10

    c#面试题抽象和接口区别-金三银四面试:C#程序员经常遇到30道基础面试题,想你所想

    (2)new修饰符用于隐藏成员继承成员。   使用修饰符来修改方法、属性、索引器或事件。重写方法提供从继承成员新实现。由重写声明重写方法称为重写方法。...将调用大部分派生类重写成员,如果没有派生类重写该成员,则它可能是原始成员。默认情况下,方法是非虚拟。   不能重写非虚方法。不能将修饰符与以下修饰符一起使用:static、、。   ...方法参数上ref方法参数关键字使方法引用传递方法同一个变量。当控制传递回调用方法时,在方法中对参数所做任何更改都将反映在在该变量中。若要使用ref参数,必须将变量作为ref参数显示传递方法。...重写主要是在继承中体现,就是在定义方法并在派生类中使用新实现重写它们。   13、什么是反射?如何实现反射?   反射提供了访问程序集、模块和类型信息一种机制。...在定义具有内部访问能力成员程序集外部引用该成员是错误。   25、JAVA代码是半编译半解释,C#代码是否也是这样

    1.9K20

    C++ 面试必备:常见 C++ 面试题汇总及详细解析

    对于C++程序员来说,精通指针使用是非常重要重写和重载区别 重写指的是在派生类中重新定义虚函数行为。...当某个虚函数在派生类中被重新定义时,如果派生类对象调用该函数,则会覆盖掉实现,执行派生类实现代码。在进行对象多态性转换时,重写非常重要。...因此,重写和重载主要区别在于,重写是通过派生类重新定义虚函数行为,以实现运行时多态性;而重载是在同一作用域内声明几个相同名称函数,以实现编译时多态性。...C++多态是指在继承关系中,子类可以重写虚函数,从而使得一个指向子类对象指针能够调用子类函数而不是父函数。底层原理涉及虚函数表、虚指针等概念。...析构函数为何要声明为虚函数? C++析构函数声明为虚函数是为了确保在通过指针或引用删除派生类对象时,可以正确地释放派生类对象所占用内存。

    2.1K30

    【笔记】《Effective C++》条款1-25

    改善C++效率一大方法就是以const引用方式传递参数 C++const函数不可以更改对象内static变量, 但是依然可以从指针修改内容, 要小心 有些时候我们希望写一个const函数但是令其在某些特殊时候能修改某些变量..., 所有自动创建函数都是public, non-virtualinline, 只会简单地将static成员拷贝目标对象中...., 是先构造, 然后逐级向上构造, 底层构造完成前, 派生类相关变量都是未定义....析构函数尽管调用顺序相反但是思路一致 所以不要在析构/构造过程中调用虚函数 补偿方法是将需要让派生类执行函数以非虚函数形式写好, 然后将其所需变量通过构造函数在构造初值列中进行传递...., 也就是由拷贝构造函数生成 因此如果只是简单地传入对象会浪费很多构造/析构操作, 最好做法是传const引用 传const是为了让调用的人放心传入, 同时传入引用还能避免对象切割问题(派生类传入声明为参数时派生类会退化为

    1.1K30

    【C++】C++多态世界:从基础前沿

    那么在继承中要构成多态还有两个条件: 必须通过指针或者引用调用虚函数 被调用函数必须是虚函数,派生类必须对虚函数进行重写 1....即虚函数返回对象指针或者引用派生类虚函数返回派生类对象指针或者引用时 析构函数重写(派生类析构函数名字不同) 如果析构函数为虚函数,此时派生类析构函数只要定义,无论是否加...总结: 派生类虚表生成: a.先将虚表内容拷贝一份派生类虚表中 b.如果派生类重写中某个虚函数,用派生类自己虚函数覆盖虚表中虚函数 c.派生类自己新增加虚函数按派生类声明次序增加到派生类虚表最后...,调用具体函数,也称为动态多态 多态条件: 不用派生类(子类)指针或引用原因:当用子类指针或引用作为函数形参数时,如果是对象作为实参,则无法完成参数正确传递(子类对象可赋给父对象,这是由于子类容...虚函数覆盖:派生类重写虚函数会覆盖派生类对象虚表中继承函数指针,未重写虚函数依次存储在该派生类对象虚表中,这样派生类对象虚表中就同时存在派生类函数指针,在用对象指针或引用调用时候通过

    10510

    abstract virtaul override new 及多态

    通过包括使用 override 修饰符属性声明,可在派生类重写虚拟继承属性。 派生类 在 C# 中,派生类可以包含与方法同名方法方法必须定义为 virtual。...(如果A中有虚方法a,那派生类B,C分别用override及new重写a,若B,C在实例化时使用类型是A定义,那使用调用a时发布是B中方法,A中方法,若B,C在实例化时使用类型本身派生类类型定义...从派生类访问虚拟成员 替换或重写某个方法或属性派生类仍然可以使用关键字访问方法或属性。 ...,并且参数与传递参数兼容),则 C# 编译器将选择最佳方法进行调用。...发生此情况时,该对象声明类型不再与运行时类型相同。 可以定义并实现虚方法派生类可以重写这些方法,即派生类提供自己定义和实现。

    77530

    C++之面向对象语法笔记

    前言 最近项目在开发涉及C++内容相对比较多,整理一下,过程中用到C++面向对象语法笔记 正文 知识点概要 C++ & 对象 值传递&引用传递 拷贝构造函数 继承& 多态 友元 模板 类型转换...&引用传递 在函数调用中,如果需要将对象作为形参,传入某个函数进行调用,这种情况分为值传递引用传递。...初始化初值0全局变量和静态局部变量 .text段 可执行代码、只读变量,全局静态变量 //引用传递 //c++ 引用 是内存空间别名 不存在拷贝 只传递内存别名 void funRefPass...先调用父构造函数 //2.释放时先调用子类析构函数 //子类没有 就使用父方法 //子类有实现,就是用子类重写 //父类型引用 赋值子类型对象 方法都是父类型中方法 void funExtends...当调用发生时,编译器在进行重载决议时根据调用所提供参数来选择最佳匹配函数。 重写(override):派生类重写中同名同参数同返回值函数(通常是虚函数,这是推荐做法)。

    1.6K40

    C# new关键字和对象类型转换(双括号、is操作符、as操作符)

    调用类型实例构造器,传递在new调用中指定实参,大多数编译器都在构造器中自动生成代码来调用构造器,每个类型构造器都负责初始化该类型定义实例字段.最终调用System.Object构造器,该构造器什么都不做....例如Employee类型不能重写GetType方法来返回一个SuperHero类型....Person { } 然而将一个对象转换成派生类型(也就是子类型)时,C#要求进行显式转换,因为这种转换可能会在运行时失败!...将对象转换成派生类型(子类型),代码如下: public class Program { static void Main(string[] args)...是否兼容于Person类型,如果是,在if语句内部转型时,CLR再次核实stu是否引用一个Person类型,CLR类型检查增强了安全性,但无疑会对性能造成一定影响,应为CLR首先必须去判断变量引用实际类型

    98190

    解锁C++继承奥秘:从基础精妙实践(上)

    二、派生类赋值转换 在C++中,派生类之间赋值和转换遵循一些规则和限制,主要涉及指针和引用。...这意味着通过指针或引用访问派生类对象时,无法直接访问派生类中特有的成员函数或属性。 如果方法使用了虚函数(virtual),则在运行时会调用派生类重写方法(即多态)。...2.3 对象赋值限制 在C++中,不能直接将派生类对象赋值给对象(指针或引用对象)。如果这样做,只能接收到派生类部分,派生类其他成员会被“丢弃”。...basePtr指向派生类对象,在调用show()时,仍然会动态绑定派生类show()方法。...3.5 使用using声明改变作用域 C++允许使用using声明将某些成员引入派生类中,以便修改访问权限。

    10910

    解锁C++多态魔力:灵活与高效编码艺术(上)

    通过指针或引用指向派生类对象,可以在运行时调用派生类重写方法,而不依赖于对象静态类型。这种方式称为运行时多态或动态多态。...动态绑定:在main函数中,通过引用和指针来调用派生类sound方法,输出是实际派生类结果。...2.2.1 虚函数定义和基本特性 虚函数是在中用关键字 virtual 声明成员函数。 虚函数可以在派生类中被重写(override),并在运行时决定调用派生类重写方法。...总结 虚函数实现了C++多态机制,允许指针或引用在运行时动态选择合适派生类实现。 虚函数表支持动态绑定,通过表中指针定位实际调用函数。...如果虚函数返回指针或引用类型,派生类不能重写该虚函数并更改返回类型。

    11710

    【笔记】《Effective C++》条款26-55

    是唯一能做到这一点新式转型符 dynamic_cast: 安全下转型(动态转型). 是运行时类型识别(RTTI)一大工具, 可以将引用, 指针, 右值引用转到派生类....error报错, 编译期方法是额外分出细化, 然后让特定方法只在特定中有对应虚函数可重写(覆盖) 33 避免遮掩继承而来名称 当一个名称同时在小作用域和大作用域中存在时, C++会进行遮掩...(name-hiding), 至于这两个名称类型是否相同并不被考虑 这是非常危险特性, 如下图派生类mf3函数会将两个mf3一起进行遮掩, 无论那两个函数类型和形式是什么样 因此对于公有继承来说..., 如果进行了重写, 合理方法就是重写所有同名对应函数, 否则可以如下图通过在public域中用using将名称重新提出才能得到想要部分重写效果: 如果遮掩本身即是程序需要达到效果,...deque, 只是依据在deque上而已) 39 明智而审慎地使用private继承 由于访问限制原因, 编译器无法自动将private继承派生类转型为, 派生类无法使用成员 因此private

    92830

    十、继承

    使用继承原因 在面向对象编程(OOP)中,继承是一种非常重要特性,它提供了多种理由和优势来支持使用。 代码复用: 继承允许我们重用中已经定义属性和方法,而不必在派生类中重新定义它们。...通过将共通属性和方法抽象中,我们可以将注意力集中在派生类特有的属性和方法上。这种分而治之策略使得设计和实现变得更加清晰和简单。...通过继承,可以定义指针或引用来指向派生类对象,并在运行时根据对象实际类型调用相应方法。 扩展性:派生类可以在继承基础上添加新属性和方法,从而扩展功能。...这是因为指针或引用只能访问定义接口,而派生类可能添加了额外成员。 指针/引用指向派生类对象:这是多态性基础。通过指针或引用,我们可以调用派生类重写虚函数,实现运行时多态。...继承中同名成员 在C++中,当子类(派生类)和父)中存在同名成员时,这些成员实际上是在不同作用域中定义。这种情况主要涉及成员函数(方法)和成员变量(属性)。

    7210

    八、python学习笔记-面向对象-

    变量定义在函数体之外。变量通常不作为实例变量使用。 数据成员:变量或者实例变量用于处理及其实例对象相关数据。...方法重写:如果从父继承方法不能满足子类需求,可以对进行改写,这个过程叫方法覆盖(override),也称为方法重写。 实例变量:定义方法变量,只作用于当前实例。...继承:即一个派生类(derived class)继承(base class)字段和方法。继承也允许把一个派生类对象作为一个对象对待。...执行以上程序输出结果为: MyClass 变量 i 为: 12345 MyClass 方法 f 输出为: hello world """ """构造方法 很多都倾向于将对象创建为有初始状态...所以在下例中,可以这样创建一个新实例: 当然, __init__() 方法可以有参数,参数通过 __init__() 传递实例化操作上。

    20231

    .NET面试题系列 - C# 基础知识(2)

    对于有笔试题场合也可能会考一些基本类型转换是否合法。 重要程度:10/10 CLR最重要特性之一就是类型安全性。在运行时,CLR总是知道一个对象是什么类型。...在执行完上面所有语句之后,内存中状况如图(省略了类型对象指针): ? B b4 = d1; 可以执行因为左边B是,d1是派生类D。 D d3 = b2; 编译时错误。...在显式转换中,o1类型是Object,不能转换为派生类B。 2.3 什么是拆箱和装箱?它们对性能损耗体现在何处? 拆箱与装箱就是值类型与引用类型转换,是值类型和引用类型之间桥梁。...字符串==操作和.Equal是相同,因为==已经被重写为比较字符串值而不是引用。作为引用类型,==本来是比较引用,但此时被重写,这也是字符串看起来像值类型一个原因。...字符串虽然是引用类型,但如果在某方法中,将字符串传入另一方法,在另一方法内部修改,执行完之后,字符串值并不会改变,而引用类型无论是按值传递还是引用传递,值都会发生变化。

    91210

    C# .NET面试系列一:基础语法

    传递方式: 值类型在传递时是按值传递引用类型在传递时是按引用传递。但需要注意,引用类型引用本身也是值,传递引用时是按引用传递。...MyClass myObject = new MyClass();方法重写(Override):在派生类中,new 关键字可以用于隐藏成员,尤其是在派生类中重新定义一个与成员同名成员...这样,在派生类中可以定义一个与中同名但不同类型字段或属性。...默认情况下,Equals 方法执行引用比较,即检查两个对象是否引用同一个内存位置。子类可以重写 Equals 方法以提供自定义相等性比较。...在一些常见值类型(如 int、double 等)和字符串类型上,== 操作符通常执行值比较,而不是引用比较。但对于自定义类型,特别是引用类型,最好重写 Equals 方法以提供有意义相等性比较。

    23010

    【笔记】《C++Primer》—— 第三部分:设计者工具

    我们可以认为右值引用目标对象都是将要被销毁没有其他用户,也就是可以自由使用引用对象,正是这个特性让我们可以移动那些不可拷贝值 右值引用有与左值引用完全相反特性,我们无法将右值引用绑定左值上...,指重新实现了一个名称和参数都一样方法 重载 overload,指对一个同名方法进行了几种不同参数实现 可以将一个派生类对象转换为对象,此时派生类独有的部分将被截断,部分被处理而派生类部分被忽略...如果表达式不是引用也不是指针,则动态类型永远与静态类型一致 派生类可以往类型转换,而不能隐式反向转换 一个派生类函数如果想要覆盖继承来虚函数,那必须名称和形参都一致,否则编译器会认为这两个函数是独立...定义方法是在声明函数名时候函数体类似显式默认构造写法改写为=0,只能对虚函数使用这个写法 友元只对被声明有效,友元派生类都不是友元 某个继承来成员访问权限受到两个因素影响:...using声明需要改变名称(用::作用域符特指名称) 派生类转换也与派生列表访问说明符有关,本质上与类型转换函数权限有关 名称查找是根据编译时目标的静态类型从内到外进行查找,目标的静态类型决定了是否可见

    1.7K10

    读完某C++神作,我只记下了100句话

    const变量默认为extern。 引用初始化后始终绑定初始化对象,不能改变【引用本身不占存储单元】。...应将不修改实参形参定义为const引用,好处是可以传递字符串字面值(和产生右值表达式),const引用反而不灵活。 如果形参是引用,那么他只是实参别名。...如果知道派生类转换【这种转换是地址赋给派生类指针】是安全【就是说心里清楚指针指向的确实是派生类】,可以使用static_cast强制编译器进行转换。...纯虚函数==抽象==无法创建对象 派生类对象复制派生类对象将被切掉【而指针和引用不会】。...对象不支持动态绑定,指针和引用支持但使用起来麻烦,解决方法定义包装或句柄【提供其它接口】。像使用指针一样使用句柄而不用管理它指向对象。类似智能指针方法建立指针句柄。

    1.4K20
    领券