java中的新关键字

时间:2013-05-19 14:04:09

标签: java inheritance

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 ??

的方法

8 个答案:

答案 0 :(得分:5)

A1 a2 = new A2(); 

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

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:2)

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

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

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

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

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

答案 3 :(得分:2)

由于A2延伸A1A2 A1。它是A1专用类型。它是A1的所有内容,但A2可能有一些独特之处。一个类比就是猫是一种哺乳动物。在Java-speak中,Cat将扩展Mammal

A1 a2 = new A2();

由于A2,此行会创建new A2()的实例。然而,这里的棘手问题是,由于A1,它将被视为A1 a2 =。让我从线上删除一点噪音:

A1 xx = new A2();

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

答案 4 :(得分:1)

A1是A2的父类,

A1 a2 = new A2();

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

答案 5 :(得分:1)

这称为polymorphism。自A2扩展A1以来,您可以将A1声明为A2,这样您就可以访问A1内的所有非重写方法以及所有覆盖A1内的A2方法(顺便说一句,覆盖时使用@Override注释是一种很好的做法。)

在这种情况下,由于A2会在您a_method()时覆盖a2.a_method(),因此您将访问A2's a_method()版本。

来自javadoc的解释:

  

多态的字典定义是指一个原则   生物体或物种可以有许多不同形式的生物学   或阶段。这个原则也可以应用于面向对象   编程和Java语言之类的语言。 a的子类   class可以定义自己独特的行为并分享一些   父类的相同功能。

答案 6 :(得分:1)

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

A1 a2 = new A2();

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

答案 7 :(得分:0)

A2对象 (扩展)A1对象也是如此。因此,您可以将A2 用作A1