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();相似吗?
附言:文章标题可能有误。如果是错的,我会根据答案来更改。
- parentCallerMethod不是静态的问题吗?那你就不能这么做了。
- @齐克:是的,如果我让它保持静止,那么我就可以做Child.parentCallerMethod(),但是我想知道new Child().parentCallerMethod();是做什么的?
- 听起来你对编码还比较陌生。new child()正在创建类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实际上不包含任何字段,因此没有任何可访问的字段。
如果是这样,您的方法将能够访问对象中的数据。
- 是否类似于执行child=new child();
- 对。几乎完全相同,只是您没有将子对象的引用实际分配给任何对象,所以一旦方法调用完成,子对象可能就不再可访问。
new Child()创建子类的实例。object.something()根据表达式object的结果调用方法something。因此,如果用new Child()代替object,用parentCallerMethod代替something,就会得到new Child().parentCallerMethod(),它创建了一个新的Child对象,并调用parentCallerMethod方法。
new Child().parentCallerMethod();创建子类的新实例,然后对子类的实例调用该方法。
Child.parentCallerMethod();将调用类子级的static方法。它不存在,所以你不能称之为它。