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

为什么我们不能用私有扩展类方法覆盖基类方法?

这个问题涉及到面向对象编程中的继承和方法重写的概念。在面向对象编程中,子类可以通过继承父类的属性和方法,并且可以重写父类的方法以实现自己的功能。但是,有时候我们需要限制子类对父类方法的重写,以确保父类的功能不会被意外地改变。

在Java中,可以通过将方法声明为final来禁止子类重写该方法。同样地,在C++中,可以将方法声明为私有的,以防止子类访问该方法。

在这个问题中,我们不能用私有扩展类方法覆盖基类方法,可能是因为基类的设计者希望保护基类方法的功能不被意外地改变。这样做可以确保基类方法的正确性和稳定性,同时也可以提高代码的可维护性和可读性。

总之,不能用私有扩展类方法覆盖基类方法,是为了保护基类方法的功能和稳定性,确保代码的可维护性和可读性。

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

相关·内容

一个简单的方法:截取子类名称中包含后缀的部分

在代码中,我们可能会为了能够一眼看清之间的继承(从属)关系而在子类名称后缀中带上的名称。但是由于这种情况下的参与实际的业务,所以对外(文件/网络)的名称通常不需要带上这个后缀。...本文提供一个简单的方法,让子类中的后缀删掉,只取得前面的那部分。 在这段代码中,我们至少需要获得两个传入的参数,一个是的名称,一个是子类的名称。...于是,我们可以写出下面的方法: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32...33 using System; namespace Walterlv.Utils { /// /// 包含名相关的处理方法。...derivedTypeName : name; } } } 我们通过判断子类是否以名称作为后缀来决定是否截取子字符串。

22730

C++ OOP面向对象

另外,抽象可以派生自一个抽象,可以覆盖的抽象方法也可以覆盖,如果覆盖,则其派生必须覆盖它们。虽然不能定义抽象的实例,但是可以定义它的指针,这正是用抽象实现接口的重点所在。...因为虚函数的作用是允许在派生中对的虚函数重新定义。所以虚函数只能用的继承层次结构中。...继承抽象的派生要实现这个函数… Q: 接口 A: 有时候,我们得提供一些接口给别人使用。 接口的作用,就是提供一个与其他系统交互的方法。...接口基本上不具备继承的任何具体特点,它仅仅承诺了能够调用的方法 一个一次可以实现若干个接口,但是只能扩展一个父 接口可以用于支持回调,而继承并不具备这个特点. 抽象不能被密封。...即: 1)公有( public )成员可以在外访问。   2)私有( private )成员只能被该类的成员函数访问。

88710
  • C++重要知识点小结---2

    也就是说子类把父私有变量也继承下来了,但是却无法访问,对于我这种菜鸟来说一下子没法转个弯来,后来看看资料焕然大悟,子类虽然无法直接访问父私有变量,但是子类继承的父的函数却可以访问,不然的话如果只继承函数而继承变量...访问控制权限: 私有继承时,中不管是公有的,还是保护的或者为私有的,一律在子类中变成私有成员。 保护继承时,中公共和保护的成员在子类中变成保护的,而私有的成员在子类中变成私有的。...公共继承时,中为公共、保护和私有的成员在子类中仍保持为公共、保护和私有的。 如果标明继承为公共还是保护或者私有,则默认的继承是私有的。...一个私有的或保护的派生不是子类,因为非公共的派生不能做能做的所有的事。 保护继承与私有继承类似,继承之后的相对于来说是独立的;保护继承的对象,在公开场合同样不能使用的成员。...纯虚函数 C++的纯虚函数用于表示一个不能被创建实例, 必需是子类覆盖方法的定义后,方可新建实例,格式是在虚函数后面添加 = 0。

    82170

    C++重要知识点小结---2

    也就是说子类把父私有变量也继承下来了,但是却无法访问,对于我这种菜鸟来说一下子没法转个弯来,后来看看资料焕然大悟,子类虽然无法直接访问父私有变量,但是子类继承的父的函数却可以访问,不然的话如果只继承函数而继承变量...访问控制权限: 私有继承时,中不管是公有的,还是保护的或者为私有的,一律在子类中变成私有成员。 保护继承时,中公共和保护的成员在子类中变成保护的,而私有的成员在子类中变成私有的。...公共继承时,中为公共、保护和私有的成员在子类中仍保持为公共、保护和私有的。 如果标明继承为公共还是保护或者私有,则默认的继承是私有的。...一个私有的或保护的派生不是子类,因为非公共的派生不能做能做的所有的事。 保护继承与私有继承类似,继承之后的相对于来说是独立的;保护继承的对象,在公开场合同样不能使用的成员。...纯虚函数 C++的纯虚函数用于表示一个不能被创建实例, 必需是子类覆盖方法的定义后,方可新建实例,格式是在虚函数后面添加 = 0。

    71770

    Python 继承

    重写 父方法有两种情况: 覆盖方法 对父方法进行 扩展 1) 覆盖方法 如果在开发中,父方法实现 和 子类的方法实现,完全不同 就可以使用 覆盖 的方式,在子类中 重新编写...扩展 如果在开发中,子类的方法实现 中 包含 父方法实现 父原本封装的方法实现 是 子类方法的一部分就可以使用 扩展 的方式 在子类中 重写 父方法 在需要的位置使用 super()....父名.方法(self) 这种方式,目前在 Python 3.x 还支持这种方式 这种方法 推荐使用,因为一旦 父发生变化,方法调用位置的 名 同样需要修改 提示 在开发时,父名 和 super...() 两种方式不要混用 如果使用 当前子类名 调用方法,会形成递归调用,出现死循环 1.3 父私有属性 和 私有方法 子类对象 不能 在自己的方法内部,直接 访问 父私有属性 或 私有方法...为,推荐使用 经典:不以 object 为推荐使用 在 Python 3.x 中定义时,如果没有指定父,会 默认使用 object 作为该类的 —— Python 3.

    67550

    C++:继承与派生

    3、 上面表格我们进行一下总结会发现,私有成员在子类都是不可见。...面使用,实际中扩展维护性不强 二、和派生对象赋值转换 1、派生对象 可以赋值给 的对象 / 的指针 / 的引用。...(但是有些情况下不可避免,后面会说) 四、派生的默认成员函数 6个默认成员函数,“默认”的意思就是指我们写,编译器会变我们自动生成一个,那么在派生中,这几个成员函数是如何生成的呢?...设置一个静态成员变量,然后在的构造函数里++ 如上图,我们可以发现如果把静态成员设为公有,那么就会出现可以修改的情况,所以我们最好把静态成员变量设成私有,然后用写一个静态成员函数getcount去获取结果...组合的优点: ①:当前对象只能通过所包含的那个对象去调用其方法(只能用接口不能用成员变量),所以所包含的对象的内部细节对当前对象时不可见的。

    15110

    Python面向对象的三大特性【封装、继承、多态】

    目录 1、封装 2、继承 3、多态 4、类属性和方法 6、静态方法 ---- 首先我们要了解面向对象程序设计三大特性: 封装------根据职责将属性和⽅法封装到⼀个抽象的中 ; 增强代码的安全性...增强代码的可扩展性 1、封装 1.1 私有属性和私有⽅法: 私有属性就是对象希望公开的属性 ; 私有⽅法就是对象希望公开的⽅法 。...重写⽗⽅法有两种情况: 1、覆盖方法 如果在开发中,⽗的⽅法实现和⼦的⽅法实现,完全不同 ,就可以使 ⽤覆盖的⽅式,在⼦中重新编写⽗的⽅法实现 。...如果在开发中,既要使用父方法,又想增加功能, 就可以使⽤扩展的⽅式 。...在 Python 2 中定义时,如果没有指定⽗,则不会以 object 作为 。新式和经典在多继承时 —— 会影响到⽅法的搜索顺序 。

    58020

    Python第七章-面向对象高级

    我们前面学习类属性和实例属性的时候知道, 访问他们的时候就可以直接获取到这些属性的值. 而特性可以看成一种特殊的属性, 为什么呢?...这种级别的私有稍微只要知道了规则, 是很容易访问到所谓的私有属性或方法的. ---- 2.2.1 为什么需要私有 封装和保护数据的需要....在面向对象的应用程序设计中, 我们通常希望这种行为, 因为他们暴露的内部实现, 可能导致派生中的使用的私有名称与中使用的相同的私有名称发生冲突. 属性或方法私有后就可以避免这种问题!...3.4.2重写父方法的两种情况 覆盖方法方法实现和子类的方法实现,完全不同,子类可以重新编写父方法实现。...] object是python为所有对象提供的,提供有一些内置的属性和方法,可以使用 dir函数查看 新式:以object为,推荐使用 经典:不以object为推荐使用

    37820

    一文学会Python面向对象中封装、继承、多态使用

    其中speed是一个私有属性,只能在的内部访问,我们通过set_speed和get_speed这两个方法来对其进行设置和获取。...二、继承(Inheritance)继承是面向对象编程中的另一个重要概念,它允许我们定义一个,并创建一个或多个派生,派生继承了的属性和方法,并可以添加或覆盖方法。...,派生可以复用的代码,也可以添加或覆盖方法提高代码的灵活性和可扩展性,通过统一的接口来操作不同的对象 实现方式通过定义私有属性和公共方法来实现...通过的继承来实现,派生使用super()来调用方法 通过方法的重写(Override)或者接口实现来实现 例子 中定义了私有属性和公共方法,外部代码只能通过公共方法来操作私有属性派生继承的所有属性和方法...,可以添加或覆盖方法 不同的实现相同的方法,通过相同的接口调用不同类的方法 从上表可以看出,封装、继承和多态是面向对象编程的三大特性,它们各有不同的目的和实现方式,但都旨在提高代码的可维护性和可扩展

    41820

    详解:Java的重写方法与示例

    在本指南中,我们将了解Java中什么是方法重写以及为什么使用它。 方法覆盖示例 让我们举一个简单的例子来理解这一点。我们有两个班级:一个孩子班,一个男孩班,一个父母班,人类班。...在Boy扩展Human。这两个都有一个通用的方法void eat()。Boy方法提供了自己的实现,eat()换句话说,它重写了eat()方法方法覆盖的目的在这里很清楚。...例如,如果父方法的访问修饰符是公共的,则覆盖方法(子类方法)不能具有私有,受保护的默认访问修饰符,因为这三个访问修饰符都比公共更严格。...我们将在即将到来的教程中通过示例详细讨论这一点。 覆盖方法的绑定在运行时发生,这称为动态绑定。 如果一个正在扩展一个抽象或实现一个接口,则它必须重写所有抽象方法,除非该类本身是一个抽象。...方法覆盖中的超级关键字 该super关键字用于调用父方法/构造函数。super.myMethod()调用的myMethod()方法,同时super()调用的构造函数。

    65440

    领悟面向对象就离开发应用不远了(提高)有你对面向对象的所有疑问,爆肝1w字

    平常不用,但是有一种地方用了更好:公有方法提供了唯一的访问途径,但是有时候不太适用于特定的问题,友元就出现了 1.友元函数 可以看为扩展接口,直接用吧: //创建友元函数是将其放入声明中 class...在好比于我们用的数据库,一般来说现成的数据库不容许个人修改,但是为了提高重用性,C++提供了继承来实现扩展和修改,就像继承一笔财产肯定比白手起家要快的多,的继承有2个概念: 我们这里用国乒来举例子...(继承了的实现) 派生还继承了的接口 当然派生和其他的使用方法大致一样:可以有自己的构造函数,可以添加额外的数据成员和成员函数 插个访问权限的事情 首先派生不能直接访问私有成员,...析构:首先调用派生析构函数,然后再调用析构函数 2.多态 ***公有 *** 继承 当需要同一个方法再派生中行为是不同的,或者说方法的行为应取决于调用该方法的对象——多态,多种状态 在派生中重新定义...Brass在声明ViewAcct()和Withdraw()方法时候使用了virtual关键字。类比于虚函数 Brass还声明一个虚拟析构函数,虽然执行任何操作。

    52820

    C++基础-继承

    公有继承中,派生的一种,比如,我们可以说,金枪鱼是鱼的一种。 阅读介绍继承的文献时,“从…继承而来”(inherits from)和“从…派生而来”(derives from)术语的含义相同。...(); // 2.2 调用派生中的覆盖方法 tuna.Fish::Swim(); // 3.1 调用中被覆盖方法 tuna.Fish...调用派生中的覆盖方法,参考注释 2.1 2.2。 调用中被覆盖方法,参数注释 3.1 3.2。 调用中被隐藏的方法,参数注释 4.1 4.2 4.3。...私有成员仍然为私有,派生不可见。 私有继承使得只有派生才能使用的属性和方法,因此表示“有一部分”(has-a)关系。...被声明为 final 的能用,因此禁止继承。

    98020

    Java 学习笔记(7)——接口与多态

    这里我们说形成多态的几个基本条件:1)指针或者引用类型是;2)需要指向派生;3)调用的函数必须是重写的函数。...引入多态实质上也是为了避免重复的代码,而且程序更具有扩展性,我们通过println函数来说明这个问题。...为什么要进行小转大呢?虽然多态给了我们很大的方便,但是多态最大的问题就是父引用无法看到子类的成员,也就是无法使用子类中的成员。这个时候如果要使用子类的成员就必须进行小转大的操作。...但是某些时候我们针对几个有共性的,抽象出了更高层面的,但是发现虽然有一些共性的内容,但是有些共有的方法不知道如何实现,比如说教科书上经常举例的动物类,由于不知道具体的动物是什么,所以也无法判断该动物是食草还是食肉...接口中的静态方法 从Java 8中开始,允许在接口中定义静态方法,静态方法可以使用实现的对象进行调用,也可以使用接口名直接调用 接口中的私有方法 从Java 9开始运行在接口中定义私有方法私有方法可以解决在默认方法中存在大量重复代码的情况

    76940

    C++:44---关键字virtual、override、final

    }; 二、为什么要设计虚函数 我们知道派生会拥有定义的函数,但是对于某些函数,我们希望派生各自定义适合于自己版本的函数,于是就将此函数定义为虚函数,让派生各自实现自己功能版本的函数(但是也可以不实现...) 我们通常在中将这两种成员函数分开来: 一种是希望派生进行覆盖的虚函数 一种是希望派生直接继承而不要改变的函数 三、覆盖(重写) 概念:的虚函数,如果派生有相同的函数,则子类的方法覆盖了父方法...覆盖(重写)与隐藏的关系: 覆盖与隐藏都是子类出现与父相同的函数名,但是有很多的不同 隐藏可以适用于成员变量和函数,但是覆盖能用于函数 覆盖(重写)在多态中有很重要的作用 四、virtual、override...关键字 virtual: 放在函数的返回值前面,用于表示该成员函数为虚函数 父虚函数前必须写;子类虚函数前可以省略(困省省略,该函数在子类中也是虚函数类型) virtual只能出现在内部的声明语句之前而不能用外部的函数定义...,那么使用的参数是虚函数的默认实参;如果覆盖了虚函数的默认实参,那么就使用自己传入的参数 派生可以改写虚函数的默认实参,但是建议,因为这样就违反了默认实参的最初目的 建议:如果虚函数使用了默认实参

    4.1K31

    java编程思想第八章多态

    对于复杂的继承体系:     1)调用的构造器     2)按声明顺序调用成员变量的初始化方法。     3)调用导出的构造器本体。   注:继承体系中,为什么这样调用?...导出的被覆盖方法可以返回方法的返回类型的某种导出类型。 8.5用继承进行设计:   实际上是表明了在继承用于设计的时候,一定要慎重,:   继承要求在编译时就要知道确切的类型。   ...纯继承与扩展:   纯继承是is-a的关系:可以接受发送导出的任何消息,因为二者有着完全相同的接口。我们只需要从导出向上转型,永远不需要知道正在处理的对象的确切类型。   ...实际上extends用于扩展接口,这样是一种is-like-a的关系。导出就像一个,除了有着同相同的接口外,还有自己额外方法实现的特性。   导出中接口的扩展部分不能被访问。...对于这种类型,在向上转型时的问题就在于,扩展部分不能被访问。   为了解决向上转型中,无法识别扩展部分,提出了向下转型的概念。   但是有可能出现的问题:你不知道到底要转成哪个类型。

    37330

    Python面向对象之继承(02)

    继承是指这样一种能力:它可以使用现有的所有功能,并在无需重新编写原来的的情况下对这些功能进行扩展。...1.覆盖方法 在子类中定义一个和父类同名的方法并且实现 2.对父方法进行扩展 在子类中重写父方法 在需要的位置使用 super().父方法 注意: python2.0 中调用父方法...父名.方法(self) python 3.0 中仍然保留 但是推荐使用 ,一旦父发生变化 方法调用位置的名也需要修改。...2、在调用方法时,需要加上名前缀,且需要带上 self 参数变量。...私有属性或 私有方法 继承有两种用途: 一:继承方法,并且做出自己的改变或者扩展(代码重用) 二:声明某个子类兼容于某,定义一个接口Interface,接口中定义了一些接口名(就是函数名

    49820

    面向对象封装、继承、多态

    重写 父方法有两种情况: 覆盖 父方法 对父方法进行 扩展 1) 覆盖方法 如果在开发中,父方法实现 和 子类的方法实现,完全不同 就可以使用 覆盖 的方式,在子类中 重新编写... 父方法实现 具体的实现方式,就相当于在 子类中 定义了一个 和父类同名的方法并且实现 重写之后,在运行时,只会调用 子类中重写的方法,而不再会调用 父封装的方法 2) 对父方法进行扩展...如果使用 当前子类名 调用方法,会形成递归调用,出现死循环 1.3 父私有属性 和 私有方法 子类对象 不能 在自己的方法内部,直接 访问 父的 私有属性 或 私有方法 子类对象... 可以通过 父 的 公有方法 间接 访问到 私有属性 或 私有方法 私有属性、方法 是对象的隐私,不对外公开,外界 以及 子类 都不能直接访问 私有属性、方法 通常用于做一些内部的事情...以object为,推荐使用 经典:不以object为推荐使用 在Python 3.x中定义时,如果没有指定父,会 默认使用 object 作为该类的  ——Python

    61920

    C++面试知识总结

    继承:子类继承父方法和属性,继承可以扩展已存在的代码,目的是为了代码重用。...多态:通过继承同一个,产生了相关的不同的派生,与中同名的成员函数在不同的派生中会有不同的实现,也就是说:一个接口、多种方法。...函数覆盖是指派生函数覆盖函数,函数名、参数类型、返回值类型一模一样。派生的对象会调用子类中的覆盖版本,覆盖中的函数版本。 隐藏”是指派生的函数屏蔽了与其同名的函数。...函数有virtual,是覆盖,没有virtual就是隐藏。...私有继承时,的成员只能被直接派生的成员访问,无法再往下继承。 受保护继承时,的成员也只被直接派生的成员访问,无法再往下继承。

    1.7K41

    不是吧?不会多态,你还说自己会Java

    忘记对象类型 在 test.start()方法中,定义传入的是 Animal 的引用,但是却传入Monkey,这看起来似乎忘记了Monkey 的对象类型,那么为什么直接把test中的方法定义为void...这样子我们在开发接口的时候只需要传入 的引用,从而这些代码对所有 的 导出 都可以正确的运行。 ?...可扩展性 有了多态机制,我们可以根据自己的需求对系统添加任意多的新类型,而不需要重载void start(Animal animal)方法。...在一个设计良好的OOP程序中,大多数或者所有方法都会遵循start()方法的模型,只与接口同行,这样的程序就是具有「可扩展性」的,我们可以通过从通用的继承出新的数据类型,从而添加一些功能,那些操纵接口的方法就不需要任何改动就可以应用于新...√ × × × public:所有可见 protected:本类、本包和子类都可见 default:本类和本包可见 private:本类可见 「私有方法带来的失灵」: 复习完我们再来看一组代码:

    37130

    《现代Javascript高级教程》面向对象之Class

    继承(Inheritance):通过定义一个(父),其他可以继承该的属性和方法,并可以在此基础上进行扩展覆盖。...通过super关键字调用父的构造函数,确保父的属性被正确初始化。子类可以新增或覆盖方法。...#privateMethod(); } } 在上述示例中,我们定义了一个Person,它具有一个私有属性#name和一个私有方法#privateMethod()。...的继承 继承是面向对象编程中的重要概念之一,它允许我们创建一个(父),其他可以继承该扩展覆盖其中的属性和方法。ES6中使用extends关键字实现的继承。...通过继承和方法覆盖,不同的子类可以对父方法进行不同的实现,从而实现多态性。

    20820
    领券