如果Abstract类无法实例化,那么变量怎么样呢 访问和方法访问抽象类A即使没有 在班级检查中实现扩展(如下所示) 代码)
创建的 a 是抽象类A的对象吗?
代码
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)
答案 0 :(得分:7)
new A() {}
调用创建一个匿名子类并实例化它。由于A
不包含任何抽象方法,因此可以使用。
答案 1 :(得分:5)
您正在使用此代码创建A的子类 -
A s = new A() {};
以及此处 -
public check()
{
new A("TWO"){};
}
然而,实例化的正常语法是这个 -
A a = new A();
如果您尝试运行此代码,则会出现编译错误。因此,您的类中没有任何抽象方法,因此名义子类就足够了,您可以执行代码。
HTH, - Manish
答案 2 :(得分:1)
正常用例是,您编写new MyAbstractClass(){
然后实现您需要实现的任何抽象方法(和/或覆盖现有的非抽象方法),编译器将推断出非抽象子类为了你。由于您的类没有任何抽象方法,因此不必覆盖任何内容。
答案 3 :(得分:1)
A
被标记为抽象,但是没有抽象方法,所以当你执行new A() {}
时,你提供的实现中没有任何内容,因此你提供了一个具体的实现,并且该类已经完成。
答案 4 :(得分:0)
忽略“可见性”(公共,私有,包范围等)......您通常需要一个类实例来访问类成员。
异常是静态类。
否则,如果您有一个抽象基类,则需要子类来获取实例。
然而,在你的情况下,这个类并不是真正的“抽象”(尽管你试图将它标记为这样)。仅仅因为没有抽象的成员或方法。
答案 5 :(得分:0)
A s = new A() {};
在右侧有一个新的anonimus类继承自A。一个类天堂的抽象方法所以在你的新的anonimus课程中你不需要覆盖任何方法。
答案 6 :(得分:0)
答案 7 :(得分:0)
new A("TWO"){};
这是一个匿名子类
这个班同时创造和实例化。
2.没有该类的名称..
3.因为没有名字所以必须要父母
您可以通过s.getClass().getName();
获取返回A$1
....