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

什么时候一个子类太不同而无法继承?

当一个子类与父类在逻辑上完全不相关,或者子类需要完全重新实现父类的所有方法和属性时,子类就太不同而无法继承。

在面向对象编程中,继承是一种重要的机制,它允许子类继承父类的属性和方法,并且可以在此基础上进行扩展和修改。然而,当子类与父类之间的关系变得过于独立和不相关时,继承就不再适用。

以下情况可能导致一个子类太不同而无法继承:

  1. 逻辑上的不相关性:子类的功能和目的与父类完全不同,无法通过继承来共享父类的属性和方法。例如,一个父类是用于处理图像的类,而子类是用于处理音频的类,它们的功能和实现方式完全不同,无法通过继承来共享代码。
  2. 需要完全重新实现:子类需要完全重新实现父类的所有方法和属性,而无法重用父类的代码。这可能是因为子类的实现方式与父类完全不同,或者子类需要使用不同的数据结构或算法来实现相同的功能。

在这种情况下,更合适的做法是使用其他的代码复用机制,如组合或接口实现。通过组合,子类可以包含一个父类的实例作为成员变量,并在需要时调用父类的方法。通过接口实现,子类可以定义自己的方法和属性,并在需要时实现接口中定义的方法。

总之,当子类与父类在逻辑上完全不相关,或者子类需要完全重新实现父类的所有方法和属性时,子类就太不同而无法继承。在这种情况下,应该考虑其他的代码复用机制来实现所需的功能。

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

相关·内容

Java 基础巩固:再谈抽象类和接口

什么时候创建接口? 设计框架时该如何选择? 我比较喜欢这样的问题,答案可深可浅,体现了我们对日常工作的思考。 我们什么时候会创建一个抽象类?什么时候会创建一个接口呢?...抽象类是由子类具有相同的一类特征抽象而来,也可以说是其基类或者父类 抽象方法必须为 public 或者 protected(因为如果为 private,则不能被子类继承子类便无法实现该方法),缺省情况下默认为...public 抽象类不能用来创建对象 抽象方法必须由子类来实现 如果一个继承一个抽象类,则子类必须实现父类的抽象方法,如果子类没有实现父类的抽象方法,则必须将子类也定义为抽象类 抽象类还是很有用的重构工具...,包括属性、行为,但是接口却是对类局部行为进行抽象 跨域不同 抽象类所跨域的是具有相似特点的类,接口却可以跨域不同的类 抽象类所体现的是一种继承关系,考虑的是子类与父类本质“是不是”同一类的关系...组合就是通过持有一个类的引用来拥有他的一切,不是继承,在需要调用他的方法时传入引用,然后调用,否则就清除引用。

674100

java基础学习_面向对象(下)01_day08总结

B:Java中可以多层(重)继承(继承体系) (7)那么什么时候使用继承呢?     A:继承体现的是:is a的关系。     B:采用假设法。...C:成员方法       a:子类的成员方法名称和父类中的成员方法名称不一样时,这个简单。       ...方法重载:本类中出现的方法名一样,参数列表不同,与返回值类型无关的方法。 方法重写的使用特点:       如果子类和父类的方法名不同,就调用各自对应的方法。       ...因为父类私有方法子类根本无法继承。 2.子类重写父类方法时,访问权限不能更低。(最好权限要一致。)         默认的权限要小于public的权限。...因为方法是跟对象相关的,静态是跟类相关的。 小结:子类重写父类方法的时候,最好声明一模一样。

32520

100%会使用到的一个设计原则,你是否也了解呢?

组合复用原则,实在是太重要,也普遍了!无论是23中设计模式中,还是实际开发中,它的运用都十分强大。 PS:大家想一想,我们之前不是分享了单一职责原则吗?但在我们的实际项目中,一个功能可不止一个职责。...因为继承会将父类的实现细节暴露给子类,父类对子类是透明的,所以这种复用又称为“白箱”复用。 2).子类与父类的耦合度高。父类的实现的任何改变都会导致子类的实现发生变化,这不利于类的扩展与维护。...什么时候使用继承复用,什么时候使用组合复用呢? 这个问题在里氏替换原则中有详细的讲解!小伙伴们可以点击查看下。...PS:错误的使用继承不是组合/聚合的一个常见原因是错误的把“has-a”当成了“is-a”。...“is-a”代表一个类是另外一个类的一种;“has-a”代表一个类是另外一个类的一个角色,不是另外一个类的特殊种类。

13620

【java筑基】浅谈代码复用技术——继承、组合

一、继承 1.1 继承的特点 子类可以获得父类的全部成员变量和方法称为继承,注意子类不能够继承父类的构造器。Java具有单继承的特点,一个类只能够有一个直接父类。...特别注意的是子类与父类重写的方法不能一个是属于类,一个是属于对象的。 如果父类定义了一个private修饰的方法,子类无法访问该方法,不可以对该方法进行重写。...//Animal的一个参数构造器Animal名字为灰狼 //Animal的两个参数的构造器其年龄为18 //Wolf的一个参数构造器 new Wolf("灰狼",...什么时候需要继承? 1.子类需要额外增加特有属性。...继承子类可以直接获得父类的方法,组合是把旧类对象作为新类的一个变量组合进来,通常在新类中用private修饰这个旧类对象。 选择继承还是组合呢?

23610

Java的继承

一、继承是什么 简介 Java的继承是面向对象编程中的一个重要概念。它允许一个类(称为子类继承一个类(称为父类)的属性和方法。...Java 中一个子类只能继承一个父类 (C++/Python等语言支持多继承). 子类继承父类的所有 public 的字段和方法....对于父类的 private 的字段和方法, 子类中是无法访问的. 子类的实例中, 也包含着父类的实例. 可以使用 super 关键字得到父类实例的引用....其他类不能访问. protected: 类内部能访问, 子类和同一个包中的类可以访问, 其他类不能访问. public : 类内部和类的调用者都能访问 什么时候下用哪一种呢 我们希望类要尽量做到 “...但是即使如此, 我们并不希望类之间的继承层次复杂. 一般我们不希望出现超过三层的继承关系. 如果继承层次太多, 就需要考虑对代码进行重构了.

5510

Java基础-Day03

不要为了部分功能而去继承 我们到底在什么时候使用继承继承中类之间体现的是:”is a”的关系 私有成员无法继承 package  com.yueqian.day1; class  Father {...继承中成员变量的关系: A:子类中的成员变量和父类中的成员变量名称不一样,这个简单。...案例演示 子父类中同名和不同名的成员方法 结论: 通过子类对象去访问一个方法 首先在子类中找 然后在父类中找 如果还是没有就报错。...[n4] 方法重写 子类中出现了和父类中一模一样的方法声明,也被称为方法覆盖,方法复写 使用特点: 如果方法名不同,就调用对应的方法 如果方法名相同,最终使用的是子类自己的 方法重写的应用: 当子类需要父类的功能...,功能主体子类有自己特有内容时,可以重写父类中的方法,这样,即沿袭了父类的功能,又定义了子类特有的内容。

23740

字节跳动凉面(抖音C++)(问题+解答)

各个const作用 (略) 7、C++ 的多态是指什么  (函数重载的编译多态、虚函数的运行多态、参数模板 泛型编程、类型转化都可视作多态) 8、通过虚函数可以实现运行时多态,具体是怎么实现的,什么时候动态绑定的...,特别是子类有创建于堆上的数据时,若用父类指针指向子类对象,父类析构函数如果不是虚函数,运行时父类析构函数执行子类析构函数不执行,子类多的内存无法释放) 11、构造函数里面可以调用虚函数吗?...在基类构造函数调用虚函数、子类构造函数里调用虚函数分别分析,无法实现动态绑定) 12、new和malloc的区别,new的底层过程是怎样的 13、C和C++里static各有什么作用 (static...方法2:如果A不可修改,考虑继承的方式,定义一个类B继承于A,则B可以访问A的保护数据,在B中写一个公有方法对外返回该保护成员。...16、编程算法题:手写代码,输入整数n,输出n个结点可以构造出多少棵不同的二叉树?(说了两种思路,都发现不可信,会有重复。。。最后也没想出来,还是辣鸡。。)

1.8K00

「设计模式 JavaScript 描述」模板方法模式

假如我们有一些平行的子类,各个子类之间有一些相同的行为,也有一些不同的行为。如果相同和不同的行为都混合在各个子类的实现中,说明这些相同的行为会在各个子类中重复出现。...但实际上,相同的行为可以被搬移到另外一个单一的地方,模板方法模式就是为解决这个问题而生的。在模板方法模式中,子类实现中的相同部分被上移到父类中,而将不同的部分留待子类来实现。...一个是咖啡,一个是茶,但我们可以把它们都抽象为“饮料”。 泡的方式不同。咖啡是冲泡,茶叶是浸泡,我们可以把它们都抽象为“泡”。 加入的调料不同。...在这一原则的指导下,我们允许底层组件将自己挂钩到高层组件中,高层组件会决定什么时候、以何种方式去使用这些底层组件,高层组件对待底层组件的方式,跟演艺公司对待新人演员一样,都是“别调用我们,我们会调用你...模板方法模式是好莱坞原则的一个典型使用场景,它与好莱坞原则的联系非常明显,当我们用模板方法模式编写一个程序时,就意味着子类放弃了对自己的控制权,而是改为父类通知子类,哪些方法应该在什么时候被调用。

25610

Java基础:Java面向对象

并且可以通过覆盖/重写来增强已知类的能力,子类共性的方法或者属性直接采用父类的,不需要自己定义,只需要扩展自己的个性化 通过 extends 关键字,可以声明一个子类继承另外一个父类,子类可以直接访问父类的非私有化成员变量...; 父类被覆盖的方法的参数列表中被声明为 final 的参数,在子类的覆盖方法的中可以不必指定为 final; 静态方法不能被覆盖,只能被隐藏; 四、特性:多态 1、概述 多态: 是指对象的多种形态,封装和继承几乎都是为多态准备的...:提高代码的可维护行、提高代码的扩展性 2、注意事项 多态分为编译时多态和运行时多态,Java中的多态一般是运行时多态; 必须有子父类关系或者类实现接口关系,否则无法完成多态; 同一个父类的方法会被不同子类重写...在调用方法时,调用的为各个子类覆盖后的方法; 当变量名指向不同子类对象时,由于每个子类覆盖父类方法的内容不同,所以会调用不同的方法 多态中成员访问的特点:编译看左边,运行看左边 3、编译时多态(方法重载...如果是直接创建父类对象,是无法向下转型的; 格式:子类类型 变量名 = (子类类型) 父类类型的变量;; 什么时候使用:当要使用子类特有功能时,就需要使用向下转型; 向下转型的好处:可以使用子类特有功能

50230

java基础第六篇之常用思想、封装、继承和多态

: 由孩子 继承 父辈的财产 * * 代码中继承: 由 一个类(子类/派生类) 去继承另外一个类(父类/超类/基类) * 子类可以继承父类一切的可继承的属性和方法 * * 继承的代码格式:...继承中方法重写 * * 1.方法的重载(overload):在一个类中,java允许方法名相同 但是参数列表必须不同 * 参数列表必须不同:参数的个数,参数的类型,参数的顺序不同 * *...2.方法的重写/覆写/覆盖(override):子类和父类中的方法的关系,子类出现了父类一模一样的方法 总结以上案例:什么时候需要重写父类的方法?...:面向对象设计的一个原则 单一职责原则 * 一个类 不能"累",只负责自己数据 面向对象 开闭原则 对修改关闭,对扩展开放....* 3.设计时由具体类抽取出抽象类,开发阶段应该先定义抽象父类,再根据不同需求由父类定义子类

42730

2022-09-20 里氏替换

直觉上子类是拓展了父类,父类能做的事确实子类都应该能做到,子类可能有自己独有的东西,父类无法实现。 定义时尽量用父类或接口,这样使用时可以传递各种不同实现的子类。...如果子类不能完整地实现父类的方法,或者父类的某些方法在子类中已经发生“畸变”,则建议断开父子继承关系,采用依赖、聚集、组合等关系代替继承。...子类输入参数范围可以扩展 比如父类的方法参数是 HashMap,子类同名方法参数是 Map,方法名相同,参数类型不同,属于重载。...这样父类调用传一个 HashMap 参数,父类方法被执行,根据 LSP 原则,父类可以被替换为子类,还是执行子类从父类继承来的方法,即执行那个参数是 HashMap 的方法。 这是希望的。...如果父类参数是 Map,子类是 HashMap 相当于范围缩小,这样父类传参 HashMap,执行到参数是 Map 的方法,当父类被子类替换后,会执行到子类参数是 HashMap 的方法,不是从父类继承的参数为

19920

Java基础-08(01)总结帮助文档,代码块,继承

s.show(); s.function(); } } (7)什么时候使用继承呢?...B:采用假设法 (8)Java继承中的成员关系 A:成员变量 a:子类的成员变量名称和父类中的成员变量名称不一样,这个简单 b:子类的成员变量名称和父类中的成员变量名称一样,这个怎么访问呢?...子类通过super去明确调用带参构造 子类通过this调用本身的其他构造,但是一定会有一个去访问了父类的构造 让父类提供无参构造 C:成员方法 a:子类的成员方法和父类中的成员方法名称不一样,这个简单...通过子类对象访问一个方法的查找顺序: 在子类中找,有就使用 在父类中找,有就使用 找不到,就报错 /* 类的组成: 成员变量: 构造方法: 成员方法: 现在我们又讲解了继承,所以,我们就应该来考虑一下...继承中成员变量的关系: A:子类中的成员变量和父类中的成员变量名称不一样,这个简单。 B:子类中的成员变量和父类中的成员变量名称一样,这个怎么玩呢?

79750

【C++深度探索】继承机制详解(二)

一个继承一个类时,它只会继承基类的成员函数和数据成员,不会继承基类中声明的友元函数。...2.继承与静态成员 基类定义了static静态成员,则整个继承体系里面只有一个这样的成员。无论派生出多少个子类,都只有一个static成员实例。 静态成员是属于类不是对象的成员。...继承是一种面向对象编程中的机制,允许一个类(称为派生类或子类)从另一个类(称为基类或父类)继承属性和行为。通过继承子类可以继承父类的特征和功能,并且可以添加或修改自己的特性和功能。...②虚拟继承确保在最终派生类中只有一份数据成员和函数,解决了数据冗余与二义性问题。 继承和组合的区别?什么时候继承什么时候用组合? ①public继承是一种is-a的关系。...当两个类之间没有明确的层次关系,或者需要构建复杂对象时,可以使用组合。组合可以帮助代码实现更灵活的结构,并且可以随时替换或扩展不同的组件。另外要实现多态,也必须要继承

7410

JavaSE篇学习之路:(六)【面向对象------中】

~ 第一章:继承(Extexnds) 1.1什么是继承?作用? 继承:指一个对象直接使用另一对象的属性和方法 继承的作用: 基本作用:子类继承父类,代码可以得到复用。...④ java 中规定,子类继承父类,除构造方法不能继承之外,剩下都可以继承。 但是私有的属性无法子类中直接访问。(父类中private修饰的不能在子类中 直接访问。...当子类继承父类后,继承过来的方法无法满足子类的需求,子类将这个方法进行重写。 将继承过来的方法进行覆盖,执行覆盖后的方法。 方法覆盖满足的条件: 两个类为继承关系。...什么时候需要向下转型? 需要调用或者执行子类对象中特有的方法。 必须进行向下转型,才可以调用。 向下转型有风险吗?...如果在子类中加一个name属性呢?

25230

Java学习笔记【持续更新】

成员变量随着对象的创建存在,随着对象的回收释放 静态变量随着类的加载存在,随着类的消失消失 2.调用方式不同: 成员变量只能被对象调用; 静态变量可以被对象调用,还可以被类名调用 3.别名不同...java中变成了多实现,一个类可以实现多个接口 单继承一个子类只能有一个直接父类 多继承一个子类可以有多个直接父类(java中不允许,进行改良) 不直接支持,因为多个父类中有相同成员,会产生调用不确定性...java支持多层(多重)继承 C继承B,B继承A,就会出现继承体系 当要使用一个继承体系时, 1.查看该体系中的顶层类,了解该体系的基本功能 2.创建体系中的最子类对象,完成功能的使用 什么时候定义继承...override 覆盖注意事项: 1.子类方法覆盖父类方法时,子类权限必须大于等于父类的权限 2.静态只能覆盖静态,或者被静态覆盖 什么时候使用覆盖操作 但对一个类进行子类的扩展时,子类需要保留父类的功能声明...,无法让功能继续,运算无法进行, 更多的是因为调用者的原因导致的或者引发了内部状态的改变导致的,那么这种问题一般不处理,直接编译通过,在运行时,让调用者调用时的程序强制停止, 让调用者对代码进行修正

1.3K50

java小心机(4)| 继承与组合的爱恨情仇

在运行时,子类无法选择不同的父类 紧耦合 缺点分析 1.为什么说破坏封装性?...,继承树深度加深,结构越复杂 3.继承不能支持动态继承 因为继承是编译期就决定下来的,无法在运行时改变 4.为什么说紧耦合?...意思是父类和子类的耦合性很高,比如说将父类的一个成员变量名称修改了,子类用到这个变量的地方就需要做修改。 做为一个设计者,应当努力减小耦合关系。...如何选择 从前面的介绍已经优缺点对比中也可以看出,组合确实比继承更加灵活,也更有助于代码维护。 所以,建议在同样可行的情况下,优先使用组合不是继承。因为组合更安全,更简单,更灵活,更高效。...扩展:向上转型 即用父类引用指向子类对象 什么时候用到向上转型?

48431

Java基础笔记08

如果想看这个体系的共性功能,看最顶层的类 08.06_面向对象(继承的注意事项和什么时候使用继承) A:继承的注意事项 a:子类只能继承父类所有非私有的成员(成员方法和成员变量) b:子类不能继承父类的构造方法...c:不要为了部分功能而去继承 B:什么时候使用继承 继承其实体现的是一种关系:"is a"。...,功能主体子类有自己特有内容时,可以重写父类中的方法。...这样,即沿袭了父类的功能,又定义了子类特有的内容。 C:案例演示 a:定义一个手机类。...08.14_面向对象(方法重写的注意事项) A:方法重写注意事项 a:父类中私有方法不能被重写 因为父类私有方法子类根本就无法继承 b:子类重写父类方法时,访问权限不能更低 最好就一致

46750

java面试题(中)

二、创建线程有几种不同的方式?哪一种好?...1、继承Thread类 2、实现Runnable接口 3、实现Runnable接口比较好,因为不需要继承Thread类,java是单继承的,不支持多继承,在一个继承了其他类的类中,要想实现线程,只能实现接口来完成...什么时候应该用Array不是ArrayList? 1、Array大小固定,存储数据和对象。声明同时必须进行实例化,至少得初始化数组的大小。只能存储同构的对象(类型一致)。...根据他们的区别判断具体什么时候用,不多赘述了。 四、谈谈对异常的理解 异常分为error和exception 1、error是系统异常,不可控。 2、exception是可控的异常。...不能是static,抽象方法需要子类重写,静态方法是无法被重写的。 不能是native,本地方法是由本地代码实现的方法,抽象方法没有方法体,没有实现。

18410

第五章:面向对象编程

方法覆盖/override/方法重写/overwrite 什么时候考虑使用方法重写? 当从父类中继承过来的方法,无法满足子类的业务需求时。 当满足什么条件的时候 ,构成方法重写?...向上转型和向下转型 多态的向上转型 : 编译看左边 ,运行看右边 其中在多态的向上转型中使用对象去调用方法时只能调用子类从父类那里继承的方法或者时重写的方法 ,不能调用子类自己特有的方法。...迪米特法则:一个对象应该对其它对象保持最少的了解。即一个类应该对自己需要耦合或调用的类知道得最少。 合成复用原则:尽量使用对象组合和聚合,不是继承来达到复用的目的。...抽象类 什么时候考虑将类定义为抽象类? ​如果类中有些方法无法实现或者没有意义,可以将方法定义为抽象方法。类定义为抽象类。​这样在抽象类中只提供公共代码,具体的实现强行交给子类去做。...比如一个Person类有一个问候的方法greet(),但是不同国家的人问候的方式不同,因此greet()方法具体实现应该交给子类

10111

接口vs抽象类的区别?如何用普通的类模拟抽象类和接口?

Logger 是一个记录日志的抽象类,FileLogger 和 MessageQueueLogger 继承 Logger,分别实现两种不同的日志记录方式:记录日志到文件中和记录日志到消息队列中。...刚刚我们讲到,抽象类不能实例化,只能被继承前面的章节中,我们还讲到,继承能解决代码复用的问题。所以,抽象类也是为代码复用而生的。...多个子类可以继承抽象类中定义的属性和方法,避免在子类中,重复编写相同的代码。 不过,既然继承本身就能达到代码复用的目的,继承也并不要求父类一定是抽象类,那我们不使用抽象类,照样也可以实现继承和复用。...当创建一个新的子类继承 Logger 父类的时候,我们有可能会忘记重新实现 log() 方法。之前基于抽象类的设计思路,编译器会强制要求子类重写 log() 方法,否则会报编译错误。...从类的继承层次上来看,抽象类是一种自下而上的设计思路,先有子类的代码重复,然后再抽象成上层的父类(也就是抽象类)。接口正好相反,它是一种自上而下的设计思路。

1.1K50
领券