对于编码项目,我有一个包含嵌套类的类。嵌套类是同一个外部类的子类。目的是让外部类包含嵌套类的一些实例,它可以将这些实例传递给外部类的其他实例。嵌套子类允许外部类修改内容,而其父类(superclass)允许读取内容和调用一些方法。父类(superclass)对象因此被传递给其他对象,以链接链中的外部类对象。我的问题与访问修饰符有关。这是一个极简代码示例:abstractclassOuterClass{protectedclassNestedSuperClass{privateTdata;publicNestedSuperClass(Tt){this.data=t;}publicTget
我遇到了一个奇怪的问题,我无法弄清楚在尝试插件化我的程序时弹出的问题。另一个问题是我无法创建一个简单的测试用例,因为每次我尝试它都会成功。一定有一些我遗漏的并发症。但我会尽可能清楚地描述情况,以免任何人听起来很熟悉。我有一个名为Seed的基类,它是主应用程序的一部分,由系统类加载器加载。我有一个插件,其中包含一个Road类,它是Seed的一个子类。它在运行时从一个单独的jar文件加载。类Road引用了字段Seed.garden,其定义为:protected最后花园;请注意,我没有收到编译错误。当插件jar包含在系统类路径中时,我也不会收到运行时错误。只有当我的主应用程序使用新的类加载器
我有一个抽象类,我想在其中声明最终变量。但是,我只想在子类的构造函数中为这些变量赋值。显然,这是不可能的,因为所有“最终字段都必须初始化”。我不明白为什么,因为无论如何都不可能实例化一个抽象类。我想要的是这样的:abstractclassBaseClass{protectedfinalinta;}classSubClassextendsBaseClass{publicSubClass(){a=6;}}当你实现一个接口(interface)时,我想象一些类似于方法的东西。然后你也被迫在(子)类中实现方法。 最佳答案 您应该在您的抽象类
考虑以下类:publicabstractclassAbstractClass{publicabstractStringm();publicAbstractClassget(){returnnewAbstractClass(){@OverridepublicStringm(){return"Anonymous"+super.m();//1,Compile-timeerro}};}}目前还不清楚为什么这样使用super是被禁止的。在//1处,出现如下错误Cannotdirectlyinvoketheabstractmethodm()forthetypeAbstractClass所以,我咨询
我说的是java语言。变量“this”在类内部使用时,指的是该类的当前实例,这意味着您不能在静态方法内部使用“this”。但是“super”,当用在类内部时,是指该类的父类(superclass),而不是父类(superclass)的实例,这应该意味着你可以在静态方法内部使用“super”。但事实证明你做不到。一个可能的解释是“super”也指父类(superclass)的一个实例,但我不明白为什么它应该... 最佳答案 这是JLS中关于super关键字的部分:http://docs.oracle.com/javase/specs/
我一直收到错误提示“对super的调用必须是构造函数中的第一条语句”。问题是它是我的构造函数中的第一条语句。publicvoidCheckingAccountCustomer(inta){super(n,p,b);accountNo=a;}这也是我的父类(superclass)。publicvoidcustomer(Stringn,intp,doubleb){name=n;pin=p;balance=b;}我在这里做错了什么? 最佳答案 这段代码publicvoidcustomer(Stringn,intp,doubleb){不是构
我有一个类:publicabstractclassBaseDao{protectedClassgetClazz(){returnT.class;}//...}但是编译器对T.class;说:IllegalclassliteralforthetypeparameterT。如何获取T类? 最佳答案 绝对有可能从Class#getGenericSuperclass()中提取出来因为它不是在运行时定义的,而是在编译时由FooDaoextendsBaseDao定义的.这是一个启动示例,您可以如何在抽象类的构造函数中提取所需的泛型父类(supe
考虑以下表达式集:classT{{/*1*/super.toString();//direct/*2*/T.super.toString();//syntheticSuppliers;/*3*/s=super::toString;//synthetic/*4*/s=T.super::toString;//synthetic}}结果如下:classT{T();0aload_0[this]1invokespecialjava.lang.Object()[8]4aload_0[this]5invokespecialjava.lang.Object.toString():java.lang.S
假设我有一个方法“mix”,它接受两个可能不同类型T和S的列表,并返回一个包含两者元素的列表。为了类型安全,我想指定返回的列表是R类型,其中R是T和S共有的父类(superclass)型。例如:Listfoo=mix(Arrays.asList(1,2,3),Arrays.asList(1.0,2.0,3.0));要指定这一点,我可以将方法声明为staticListmix(Listts,Listss)但是如果我想制作mix怎么办?实例方法而不是静态方法,在类List2上?Listmix...隐藏在List2的实例上,所以这不好。Listmix...解决了阴影问题,但不被编译器接受Lis
为什么对象类是Java中的父类(superclass)? 最佳答案 这是个好问题。Java选择让一个类成为所有事物的最终父类,这样就可以轻松传递任意对象,而无需知道其类型(即,您可以使用声明的Object类型来引用每个项目在类型系统中,甚至使用它们的包装类的基元)。但是,有些OOP语言(例如C++)没有Java中的通用基类。拥有通用基类的另一个好处是处理父类(superclass)的逻辑不必针对顶级类进行特殊处理(通用基类Object本身除外)。 关于java-对象类作为Java中的父类