簡體   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