我可以知道如何使用/调用年龄方法吗?这是学生班。
class Student {
public static void address(){
System.out.println("streetB");
}
}
public class School {
public static void main(String[] args) {
Student gg = new Student() {
public void age() {
System.out.println("9");
}
};
//how to call age() method here?
}
}
答案 0 :(得分:2)
您可能正在寻找不同的东西,因为您刚刚在此处创建了扩展Student
类的新类,但是它是匿名的,因此您可以访问该新方法,因为它不属于Student
课。
如果您使用的是Java 10,则可以使用var
class Student {
public static void address(){
System.out.println("streetB");
}
}
public class School {
public static void main(String[] args) {
var gg = new Student() {
public void age() {
System.out.println("9");
}
};
gg.age();
}
}
但这可能是一个很糟糕的主意,因为没有理由做这种奇怪的事情。
({var
在这里起作用,因为它可以在编译时表示该匿名类)
您可能应该将年龄字段和方法添加到Student
类中
答案 1 :(得分:0)
由于gg
被声明为Student
,并且该类中没有age()
方法,因此编译器将不允许您调用gg.age()
,因为不能保证每个学生实例将能够支持它。
您可以尝试的是反射机制,通过该机制
gg.getClass()
获取表示由gg
变量保存的对象的实际类型的类文字getDeclaredMethod("age")
以获取在该类中声明的age
方法,invoke(gg)
对gg
持有的对象调用该方法。简而言之
gg.getClass().getDeclaredMethod("age").invoke(gg);
其他方法是不将匿名类的创建实例分配给任何引用,这将限制其可能性,并直接在创建的对象(如
)上调用方法new Student() {
public void age() {
System.out.println("9");
}
}.age();
但是通过这种方式,我们以后无法在任何地方重用该对象(因为我们没有对其进行引用)。