我最近刚开始学习有关Android Studio编程的教程。一直很好,直到我遇到以下错误:
Number is abstract; cannot be instantiated.
该代码适用于本教程中的人员。 (他使用的是Android Studio 2.2.0.12的旧版本。)我的版本是3.5.1。
public void testNumber(View view) {
EditText userNumber = (EditText) findViewById(R.id.userNumber);
Number myNumber = new Number(); /* stuck at this part*/
myNumber.number = Integer.parseInt(userNumber.getText().toString());
System.out.println(myNumber.isTriangular());
System.out.println(myNumber.isSquare());
答案 0 :(得分:0)
抽象类是无法实例化的类。它们仅充当其他非抽象类的“母亲”类。数字类可能是整数,小数之类的“母”类。
现在,如果您正在学习教程,并且它告诉您创建一个名为Number的类,那么问题是该类与java.lang.Number类混在一起了。如果您有一个指导您实例化java.lang.Number的教程,那么该教程要么过时,要么是完全错误的。
但是我认为您将使用Number作为Number的任何“子”类的容器(就像您通过为Number分配一个Integer在该代码中所做的那样)。在这种情况下,请不要实例化Number,而只需执行以下操作:
Number myNumber = Integer.parseInt(userNumber.getText().toString());
答案 1 :(得分:0)
Number是一个抽象类,它意味着您必须实现它或使用现有的实现之一。 这样您写给我们的代码就可以变成:
Integer myNumber = Integer.parseInt(userNumber.getText().toString());
注意: 我看到您调用了方法 isTriangular()和 isSquare(),它们都不是Number或Integer(以及Java中的其他数字类型)的一部分。
答案 2 :(得分:0)
感谢您的贡献,但是问题是代码前面的错字方式。 这些评论确实有所帮助,我学到了一些关键点。
致谢
答案 3 :(得分:-1)
您不能使数字成为表象类。您应该使用以下子类之一:BigDecimal,BigInteger,Byte,Double,Float,Integer,Long和Short。
还有行
Number myNumber = new Number();
完全没有用,您可以像这样直接声明和分配:
Number num = Integer.parseInt(userNumber.getText().toString());