繁体   English   中英

如何在另一个类而不是超类中调用子类方法?

[英]How to call a subclass method inside an another class rather than its super class?

我想在java中的另一个类中调用子类函数。我这样做吗?

这里的例子是我的超类和子类。

public abstract class a
{
  method 0;
}

class b extends a
{
   method 1;
}

还有另一个课堂电话c 我想在课堂上做以下操作。 C是新文件中的另一个类。但是在同一个包中。

class c
{
   c val;
   public c
   {
      a var1 =( (b)val.method0()).method1;

   }
}

但是在运行程序时我得到一个异常,声明cant转换类型为b。 有没有人有建议摆脱这个?

这是我得到的实际异常错误。(我在上面的代码中写了一个演示)

线程“main”中的异常java.lang.ClassCastException:classfileparser.ConstantClass不能在classfileparser.ClassFile。(ClassFile.java:50)的classfileparser.ClassFileParser.main(ClassFileParser.java:18)C:\\中强制转换为classfileparser.ConstantUtf8。 Users \\ Dave \\ AppData \\ Local \\ NetBeans \\ Cache \\ 8.2 \\ executor-snippets \\ run.xml:53:Java返回:1 BUILD FAILED(总时间:0秒)

那么,你的代码的样子,以及你的代码中没有限制性修饰符(除非你这样做),你所要做的就是实例化子类并在你的c类中调用它的方法。

这些静态方法吗?

作为类a的实例的对象不一定是子类b的实例。 例如,如果您还有子类d

  a
 / \
b   d

类型d的对象不是b的实例,并且无法访问b定义的类方法。 ClassCastException是因为您试图将对象ClassCastException为不是其实例的对象。 有关更多详细信息,请参阅https://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html

基于异常消息, method0返回一个ConstantClass ,但您正在尝试将其method0ConstantUtf8 您可以在ConstantClass (或超类)中实现method1method0为该类,或者您必须更改method0以返回ConstantUtf8的实例而不是ConstantClass

你试图将一个c类项目转换为b是不可能的。如果你想使用类a和b的方法,你应该创建c的b超类,以便类c的项可以访问方法和字段c级 这可能有助于您更好地理解类: https//docs.oracle.com/javase/tutorial/java/IandI/subclasses.html

我认为你在这里做的是声明另一个具有不同名称的顶级类,编译器调用classname.java,所以当你调用类b时它找不到,因为编译器会查找a.java,如果那是你的文件名。你可以做如果类b在新的b.java文件中你想要什么, 或者你可以将类b声明为内部类,并从类c中调用它,如下所示: -

在甲级: -

public abstract class a
{
method 0;

class b{
method 1;
}
}

在C班: -

class c extends a{// because a is abstract c extends a
a obj1 = new a();//obj1 of class a is declared
a.b obj2 = obj1.new b();//obj2 declared for class b through obj1

public c{
obj2.method(1);//call method in inner class b
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM