繁体   English   中英

java中的新关键字

[英]new keyword in java

java新手,仍然在努力使用新的关键字和继承:

public class A1 {
    void a_method (){
        System.out.println("Inside A1 method");
    }
}

public class A2 extends A1{
    void a_method(){
        System.out.println("Inside A2 method");
    }
}

public class TestA1A2 {

    public static void main(String[] args) {

        A1 a1 = new A1();
        A1 a2 = new A2();  //not sure if it created object of A1 or A2
        A2 a3 = new A2();

        a1.a_method();
        a2.a_method();
        a3.a_method();

    }
}

我正在努力理解新关键字,如果在上面的代码中:

A1 a2 = new A2();  //not sure if it created object of A1 or A2

将a2作为A1或A2的对象? 从输出我可以看到它调用A2的方法,但我真的没有得到新的关键字。 并且当A2延伸A1时,是否可以调用A1的方法?

A1 a2 = new A2(); 

此代码创建一个A2对象,但您只能使用a2访问A1类的方法。 如果A2中的方法被覆盖,则调用A2的方法。

你创建了一个新的A2()对象,因为你说'new A2()'。 由于A2也是A1,你可以像它的A1一样引用它:

A1 a1 = new A2();
A2 a2 = new A2();

在上面的例子中,在a1中,你可以在a1上调用A1的所有方法。 对于a2,你可以调用a1和a2的所有方法,因为你继承了A1的方法。

A1 a2 = new A2(); 这将创建A2类型的对象。

这里发生了什么......

您正在创建A2类型的对象并指定类型A1的引用。 当你执行新的A2()时,它将调用构造函数A2() (它是默认构造函数)并创建一个A2类型的Object。

public class A2 extends A1{
     public A2(){
       super();
     }

    void a_method(){
        System.out.println("Inside A2 method");
    }
}

由于A2延伸A1A2 A1 它是A1特殊类型 这是A1一切,但A2可能有一些独特之处。 一个类比就是猫是一种哺乳动物。 在Java中, Cat会扩展Mammal

A1 a2 = new A2();

由于new A2()此行创建A2的实例。 然而,这里的棘手的一点是,展望未来,它会像一个待处理A1 ,因为A1 a2 = 让我从线上删除一点点噪音:

A1 xx = new A2();

这完全相同,但生成的对象称为xx 因此,我们正在创建一个A2类的实例,我们将其称为xx ,并且继续前进,我们将它视为A1

A1是A2的父类,

A1 a2 = new A2();

创建其父类为A1的A2实例。 但由于A2继承自A1,a2也是A1。

这称为多态性 由于A2延伸A1 ,你可以声明A1A2 ,并且会给您可以访问所有的内部非重写的方法A1和所有被覆盖的A1内部方法A2 (顺便说一句它的一个很好的做法,以使用@Override注释,当你重写) 。

在这种情况下,由于A2覆盖a_method()当你做a2.a_method()你会被访问A2's版本a_method()

来自javadoc的解释:

多态性的字典定义是指生物学中的原理,其中生物体或物种可以具有许多不同的形式或阶段。 这个原则也可以应用于面向对象的编程和Java语言之类的语言。 类的子类可以定义它们自己的唯一行为,但仍然共享父类的一些相同功能。

当您从Java继承类时,继承的类被称为超类。 把它想象成更普通的课程。 继承的类更专业。

A1 a2 = new A2();

在这种情况下,a2(类型A1)是通用类,通过操作,您可以使用A2中定义的更专用的类型

A2对象也是 (扩展) A1对象。 所以你可以用它作为A2 A1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM