在这个类中,抽象类对象是通过覆盖getNum()来实例化的,这个目的是什么?
public abstract class AbstractTest {
public int getNum() {
return 45;
}
public static void main(String[] args) // main function
{
AbstractTest t = new AbstractTest() // From this point didn't understand
{
public int getNum() // function
{
return 22;
}
}; //use of this
System.out.println(t.getNum()); // output
}
}
答案 0 :(得分:3)
main()
方法中的实例化只是抽象类AbstractTest
的具体实例的内联类定义。需要说明的是,变量t
是一个匿名的非抽象类实例。以下代码将实现相同的目标:
public class ConcreteTest extends AbstractTest {
@Override
public int getNum() {
return 22;
}
}
public static void main (String [] args) {
ConcreteTest t = new ConcreteTest();
System.out.println(t.getNum());
}
在开发过程中有一些情况,必须创建正式的类定义可能很麻烦。例如,如果您只需要抽象AbstractTest
类的单个实例,则使用内联定义会更容易。
答案 1 :(得分:0)
我们称之为“匿名类”#:当您需要创建和使用类,但不需要提供其名称或重用时,您可以使用匿名类。 Here是官方文件。不仅用于抽象类,还可以用于接口和一般可扩展类。
interface Base {
void print();
}
public static void main(String[] args) {
Base aInterface = new Base() {
@Override
public void print() {
System.out.println("A anonymous implement.");
}
};
Thread aThread = new Thread() {
@Override
public void run() {
super.run();
}
};
}