Java 这是抽象类的实例化吗?
如果抽象类不能被实例化,那么变量怎么能 抽象类A的访问和方法访问,即使没有 扩展是在类检查中实现的(如下图所示) 代码) 创建的a是抽象类a的对象吗 代码Java 这是抽象类的实例化吗?,java,Java,如果抽象类不能被实例化,那么变量怎么能 抽象类A的访问和方法访问,即使没有 扩展是在类检查中实现的(如下图所示) 代码) 创建的a是抽象类a的对象吗 代码 abstract class A { int a=10; public A() { System.out.println("CONSTRUCTOR ONE"); } public A(String value)
abstract class A
{
int a=10;
public A()
{
System.out.println("CONSTRUCTOR ONE");
}
public A(String value)
{
System.out.println("CONSTRUCTOR "+value);
}
void add(int sum)
{
System.out.println("THE SUM IS:"+sum);
}
int sub(int a,int b )
{
return(a-b);
}
}
public class check
{
public check()
{
new A("TWO"){};
}
public static void main(String args[])
{
int a,b,sum;
a=10;
b=15;
sum=a+b;
A s = new A() {};
new check();
s.add(sum);
int subb=s.sub(35,55);
System.out.println("THE SUB IS:"+subb);
System.out.println("THE VALUE OF A IS:"+s.a);
}
}
输出
CONSTRUCTOR ONE
CONSTRUCTOR TWO
THE SUM IS:25
THE SUB IS:-20
THE VALUE OF A IS:10
BUILD SUCCESSFUL (total time: 0 seconds)
newa(){}
调用创建一个匿名子类并实例化它。由于A
不包含任何抽象方法,这是可行的。正常的使用情况是,您需要编写新的MyAbstractClass(){
,然后实现您需要实现的任何抽象方法(和/或覆盖现有的非抽象方法),编译器将为您推断出一个非抽象子类。由于您的类没有任何抽象方法,因此无需重写任何内容。a
标记为抽象,但没有抽象方法,因此当您执行新建a(){}
您提供的实现中没有任何内容,因此您提供的是一个具体的实现,并且类是完整的。忽略“可见性”(公共、私有、包范围等)…您通常需要一个类实例来访问类成员
静态类是一个例外
否则,如果您有一个抽象基类,您将需要子类来获取一个实例
然而,在您的例子中,类并不是真正的“抽象”(尽管您试图将其标记为抽象)。这仅仅是因为没有抽象成员或方法。A s=new A(){};
右侧有一个从a继承的新anonimus类。
一个类没有抽象方法,因此在新anonimus类中,您不需要重写任何方法。您正在使用以下代码创建a的子类-
A s = new A() {};
这里也是-
public check()
{
new A("TWO"){};
}
然而,实例化的正常语法如下-
A a = new A();
如果您试图运行此代码,这将导致编译错误。因此,您的类中没有任何抽象方法,因此一个标称子类就足够了,您可以执行代码
嗯,,
-曼尼什语
1.此类同时创建和实例化…
2.没有该类的名称。
3.因为没有名字,所以它必须有一个家长。
您可以通过
s.getClass().getName();
获取名称,它返回A$1
…您可以通过调用s.getClass().getName()看到这一点;它将返回创建的匿名子类的名称(通常类似于$1)。
new A("TWO"){};