Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 这是抽象类的实例化吗?_Java - Fatal编程技术网

Java 这是抽象类的实例化吗?

Java 这是抽象类的实例化吗?,java,Java,如果抽象类不能被实例化,那么变量怎么能 抽象类A的访问和方法访问,即使没有 扩展是在类检查中实现的(如下图所示) 代码) 创建的a是抽象类a的对象吗 代码 abstract class A { int a=10; public A() { System.out.println("CONSTRUCTOR ONE"); } public A(String value)

如果抽象类不能被实例化,那么变量怎么能 抽象类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)

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();
如果您试图运行此代码,这将导致编译错误。因此,您的类中没有任何抽象方法,因此一个标称子类就足够了,您可以执行代码

嗯,, -曼尼什语
  • 您创建的抽象类A没有任何抽象方法
  • 抽象类不能实例化,但它们可以子类化
  • 抽象方法是一种声明为而没有实现的方法
  • 在构造函数检查()中,您刚刚创建了匿名类,并调用构造函数A(字符串值)
  • 这是一个匿名子类。
    1.此类同时创建和实例化…
    2.没有该类的名称。
    3.因为没有名字,所以它必须有一个家长。

    您可以通过
    s.getClass().getName();
    获取名称,它返回
    A$1

    您可以通过调用s.getClass().getName()看到这一点;它将返回创建的匿名子类的名称(通常类似于$1)。
    new A("TWO"){};