这是抽象类的实例吗?

时间:2011-11-15 05:56:25

标签: java

  

如果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)

8 个答案:

答案 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)

  • 您创建了抽象类A ,没有任何抽象方法。
  • 抽象类无法实例化,但可以子类化
  • 抽象方法是一种声明没有实现的方法。
  • 在构造函数check()中,您刚刚创建了匿名类并调用构造函数A(字符串值)。

答案 7 :(得分:0)

new A("TWO"){};  

这是一个匿名子类 这个班同时创造和实例化。
2.没有该类的名称..
3.因为没有名字所以必须要父母 您可以通过s.getClass().getName();获取返回A$1 ....

的名称