Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 向下转换后如何访问基类方法?_Java_Oop - Fatal编程技术网

Java 向下转换后如何访问基类方法?

Java 向下转换后如何访问基类方法?,java,oop,Java,Oop,这是一个Java泛型程序,它使用set(tt)、get()和print(tt)方法实现一个自定义接口 我使用的类叫做动物。它接受一个T参数(本例中为字符串)并为动物命名 我的问题是我无法访问print函数中的任何动物类方法 Animal<String> a1 = new Animal(); a1.set("Mickey"); public void print(Object o) { Animal oAnimal = (Animal) o; //Downcasting from

这是一个Java泛型程序,它使用set(tt)、get()和print(tt)方法实现一个自定义接口

我使用的类叫做动物。它接受一个T参数(本例中为字符串)并为动物命名

我的问题是我无法访问print函数中的任何动物类方法

Animal<String> a1 = new Animal();
a1.set("Mickey");

public void print(Object o) {
  Animal oAnimal = (Animal) o; //Downcasting from Object to Animal.

  System.out.println(o.get()); //not accessible, and I don't know how to make it accessible.
//I can only access the methods from Object, not my custom class called Animal.
}
Animal a1=新动物();
a1.套装(“米奇”);
公开作废打印(对象o){
Animal oAnimal=(Animal)o;//从对象向下投射到动物。
System.out.println(o.get());//不可访问,我不知道如何使其可访问。
//我只能从Object访问这些方法,而不能访问名为Animal的自定义类。
}

问题在于您仍在尝试调用
o
上的方法,该方法仍然是
Object
类型(就变量的编译时类型而言,编译器只关心该类型)

如果改为在
oAnimal
上调用该方法,则可以:

System.out.println(oAnimal.get());
(但不能返回
System.out.println
的结果,因为它是void方法。也不能为void方法指定返回值。)

请注意,这实际上与泛型无关。只需使用
String
,即可演示问题中的代码:

Object o = "foo";
String text = (String) o;
System.out.println(o.length()); // Error; Object doesn't have a length() method
System.out.println(text.length()); // Prints 3
您(编辑)的问题确实演示了泛型的使用,但您对
动物的转换是对原始类型的转换,因此将泛型排除在等式之外更简单-编译失败的原因与
动物的泛型无关。

您应该使用

oAnimal.get()

因为这是
动物的例子

请记住,您没有修改
o
,因此它将保留为
对象