java - Q : Abstract class object initiation code?

标签 java abstract-class

在这个类中抽象类对象是通过覆盖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
  }
}

最佳答案

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 类的单个实例,使用内联定义会更容易。

关于java - Q : Abstract class object initiation code?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36276060/

相关文章:

java - Spring引导-gson单例?

Java MySQL 导出到可运行程序

java - 无法为 ejb 转换 ejbRef

java - JDK7 中没有 com.sun.tools.javac

java - 是否可以将匿名类声明为抽象类?

java - 抽象类可以有final方法吗?

c# - 根据子类指定基类抽象方法的返回类型

java - 使用 -cp 选项和 list 文件中的类路径运行 java 程序

java - 抽象类与所有方法抽象和接口(interface)之间的区别?

java - 具有已发布 Api 但默认访问构造函数的抽象类