关于java:此方案中的默认构造函数重要性

Default constructor significance in this scenario

本问题已经有最佳答案,请猛点这里访问。

我有三节课,如下

1
2
3
4
5
6
7
8
9
10
11
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";
    }
}

第二类

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

调用父类方法的最终类

1
2
3
4
5
public class FinalClass {
    private void testMethod() {
        new Child().parentCallerMethod();
    }
}

我的问题是,new Child().parentCallerMethod();是做什么的?什么是new Child()。为什么我不能做Child.parentCallerMethod()

它与执行Child child = new Child();相似吗?

附言:文章标题可能有误。如果是错的,我会根据答案来更改。


new Child().parentCallerMethod()与:

1
2
Child child = new Child();
child.parentCallerMethod();

但不保存实例变量。

它将调用父方法,因为Child不重写它。您不能调用Child.parentCallerMethod(),因为此方法不是static(类方法)。


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

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

new Child()调用创建一个可以包含字段的Child对象。在您的例子中,Child实际上不包含任何字段,因此没有任何可访问的字段。

如果是这样,您的方法将能够访问对象中的数据。


new Child()创建子类的实例。object.something()根据表达式object的结果调用方法something。因此,如果用new Child()代替object,用parentCallerMethod代替something,就会得到new Child().parentCallerMethod(),它创建了一个新的Child对象,并调用parentCallerMethod方法。


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

Child.parentCallerMethod();将调用类子级的static方法。它不存在,所以你不能称之为它。