草庐IT

Inheritance

全部标签

java - 有效的 Java : Safety of Forwarding Classes

EffectiveJava3rdEdition,第18项:Favorcompositionoverinheritance描述了使用继承向类添加行为的问题:Arelatedcauseoffragilityinsubclassesisthattheirsuperclasscanacquirenewmethodsinsubsequentreleases.Supposeaprogramdependsforitssecurityonthefactthatallelementsinsertedintosomecollectionsatisfysomepredicate.Thiscanbeguara

java - 使用 OOPS 扩展已经编写的类

我正在尝试学习设计实践和OOP。我使用parking场问题作为示例开始。我有一个GeneralParkingLot接口(interface)和一个Vehicle接口(interface)。GeneralParkingLot只有一个函数returnParkingLotSize,Vehicle接口(interface)有多个Vehicle属性。我创建了一个DowntownParkingLot类,它扩展了GeneralParkingLot并具有其他属性,例如listOfCars、availableSlots等。和一个扩展Vehicle类的Car类。我有一个处理传入命令的HandlerClas

c# - Java:创建一个类型为类型参数的对象

我想编写与C#代码等效的Java代码。我的C#代码如下:publicabstractclassAwhereT:A,new(){publicstaticvoidProcess(){Process(newT());}publicstaticvoidProcess(Tt){//DoSomething...}}publicclassB:A{}publicclassC:A{}我的代码的Java等价物如下所示。publicabstractclassA>{publicstatic>voidprocess(){process(newT());//Error:Cannotinstantiatethety

java - Core Java 中的继承

对于我的家庭作业,我们的任务是“声明一个由四名“普通”大学员工、三名教职员工和七名学生组成的数组。提示用户指定要输入的数据类型(C,F,S)或退出选项(Q)。当用户继续时,接受适当人员的数据输入。如果用户输入的每个人类型的数量超过指定数量,则显示错误消息。当用户退出时,显示有关在适当的标题下列出每组人员的屏幕。如果用户在session期间没有为一种或多种类型的人员输入数据,则在适当的标题下显示适当的消息。”Class|Extends|Variables--------------------------------------------------------Person|None|

java - 循环继承使用

如果我用Java编写以下代码:publicclassAextendsA{publicstaticvoidmain(String[]args){}}这给出了涉及A的编译器错误消息循环继承。如果我编写两个类A和B,并且A继承B并且B继承A,也会发生同样的情况。这对我来说很有意义,因为很难想象这怎么可能。然后我向我大学的一位教授询问了这个问题。他说有些语言可以做到这一点,他感叹这在Java中是不可能的,并且他已经完成了一些使用循环继承等的项目,但我真的无法理解其中的任何一个。他还提到他在使用循环继承方面遇到了问题。你能告诉我这种奇怪的循环继承现象的可能用途吗?什么时候可能以及如何?是否存在这

java - 继承中的方法签名

在下面的代码中classA{publicvoidv(int...vals){System.out.println("Super");}}classBextendsA{@Overridepublicvoidv(int[]vals){System.out.println("Sub");}}然后我可以调用newB().v(1,2,3);//printSub而不是Super,这很荒谬,但效果很好。如果我将B更改为classB{publicvoidv(int[]vals){System.out.println("NotextendingA");}}对newB().v(1,2,3);的调用将无效。

java - 在Java中,是否可以通过父类的子类的构造函数来调用父类的父类(super class)构造函数?

我知道措辞有点困惑和奇怪,但请耐心等待,我不知道如何用更短的措词来表达。假设你有一个名为SuperBlah的类,你在一个名为Blah的类中继承了它,然后你将Blah继承到一个名为ChildBlah(所以SuperBlah-Blah-ChildBlah)。如果Blah没有构造函数?对于那些拒绝的人,那为什么这有效?我们有一个名为BlusterBug的类,它扩展了Critter类,并在BlusterBug的构造函数中调用了super。Critter没有构造函数,但Critter扩展的类有构造函数。(我故意省略了类的其余代码)publicclassBlusterCritterextendsC

java - 如何确保从子类中的方法在抽象父类(super class)中调用某些方法 (Java)

我有一个带有方法的抽象父类(superclass)AdoSomething().A的子类必须实现doSomething(),但也有一些公共(public)代码应该在每次子类调用时调用doSomething().我知道这可以这样实现:publicclassA{publicvoiddoSomething(){//Thingsthateverysub-classshoulddo}}publicclassBextendsA{publicvoiddoSomething(){super.doSomething();//Doingclass-B-specificstuffhere...}}虽然这似乎

java - 将父类(super class)对象作为参数传递给子类构造函数(java)

我已经做了一些搜索,但我要么没有问正确的问题,要么没有记错。无论如何,在Java中,我想知道是否可以将父类(superclass)对象作为参数传递给子类,以及使该对象的数据可用于该类的父类(superclass)的最有效方法是什么。代码示例:publicclasssuperclass{Stringmyparm1;StringmyParm2;intmyParmN;publicsuperclass(Stringp1,Stringp2,intpn){this.myparm1=p1;this.myparm2=p2;this.myParmN=pn;}//othermethodshere}publ

java - 跨不同类加载器覆盖默认访问器方法会破坏多态性

我在尝试使用默认访问器(例如:voidrun())覆盖方法时遇到了一个奇怪的行为。根据Java规范,如果类属于同一个包,则类可以使用或覆盖基类的默认成员。当所有类都从同一个类加载器加载时,一切正常。但是,如果我尝试从单独的类加载器加载子类,那么多态性就不起作用。这是示例:应用程序.java:importjava.net.*;importjava.lang.reflect.Method;publicclassApp{publicstaticclassBase{voidrun(){System.out.println("error");}}publicstaticclassInsideex