此方案中的默认构造函数重要性

时间:2015-06-03 14:21:19

标签: java

我有三个类,如下面

public abstract class Parent {
    public void parentCallerMethod() {
        getMethod(helperMethod());
    }
    public abstract void getMethod(String test);

    public String helperMethod() {
        System.out.println("inside parent helperMethod");
        return "inside parent helperMethod";
    }
}

第二课

public class Child extends Parent {
    @Override
    public void getMethod(String test) {
        System.out.println("Inside child getMEthod....");
    }
} 

调用父类方法的最终类

public class FinalClass {
    private void testMethod() {
        new Child().parentCallerMethod();
    }
}

我的问题是new Child().parentCallerMethod();做了什么?什么是new Child()。为什么我无法做Child.parentCallerMethod()

是否与执行Child child = new Child();

类似

PS:帖子标题可能有误。如果错了,我会根据答案进行更改。

4 个答案:

答案 0 :(得分:3)

new Child().parentCallerMethod()与:

相同
Child child = new Child();
child.parentCallerMethod();

但不保留实例变量。

它将调用父方法,因为Child不会覆盖它。您无法拨打Child.parentCallerMethod(),因为此方法不是static(类方法)。

答案 1 :(得分:0)

new Child().parentCallerMethod();创建Child类的新实例,然后在Child类的实例上调用该方法。

Child.parentCallerMethod();将调用类Child的static方法。哪个不存在,所以这就是你无法调用它的原因。

答案 2 :(得分:0)

$('#parent_div and :notInsideElements')创建子类的实例。 new Child()对表达式object.something()的结果调用方法something。因此,如果您将object替换为new Child()而将object替换为parentCallerMethod,则会获得something,这将创建一个新的new Child().parentCallerMethod()对象并调用{ {1}}方法就可以了。

答案 3 :(得分:0)

代码new Child().parentCallerMethod()创建一个新的Child对象并在该对象上调用该方法。

调用Child.parentCallerMethod()将是静态方法调用,但parentCallerMethod未声明为静态。静态方法意味着该方法属于该类,并且由于没有对象,因此无法访问子对象的任何成员。

new Child()调用会创建一个Child对象,其中可能包含字段。在您的情况下,Child实际上并不包含任何字段,因此无法访问。

如果确实如此,您的方法将能够访问对象中的数据。