gpt4 book ai didi

Java:为什么扩展需要一个空的构造函数?

转载 作者:搜寻专家 更新时间:2023-11-01 01:04:33 25 4
gpt4 key购买 nike

我有类 SearchToUser 和 getFilesToWord。 GetFilesToWord 必须继承 SearchToUser 字段。如果 SearchToUser 类中的构造为空,则扩展有效,否则:

cannot find symbol
symbol : constructor SearchToUser()
location: class SearchToUser
public class GetFilesToWord extends SearchToUser{
^
1 error
make: *** [all] Error 1

我不明白为什么扩展需要空构造函数。

[已添加]

-- 警告错误!使用组合!留下一个“坏”的例子—— Composition VS Inheritance

它有效,但你能发现一些弱点吗?我可以将 searchTerm 设为私有(private),为其创建公共(public)方法,为 GetFilesToWord 中的参数创建 SearchToUser 对象吗?

SearchToUser.java

public class SearchToUser {
public static GetFilesToWord geader;
public static String searchTerm;

SearchToUser(String s){
searchTerm=s.trim().toLowerCase();
files=geader.getFilesToWord(s);
}
...
}

GetFilesToWord.java

public class GetFilesToWord extends SearhToUser{
public GetFilesToWord(){super(SearchToUser.searchTerm){
...
}

最佳答案

父类(super class)不需要专门的空构造函数。子类只需要调用父类(super class)中的构造函数。如果父类(super class)具有公共(public)或 protected 无参数构造函数,则会自动调用它,否则您需要显式调用。

默认构造函数

public class Super {
}

public class Sub extends Super {
}

这里,Super 没有指定构造函数,所以添加了一个。 Sub 也一样。上面看起来真的是这样的:

public class Super {
public Super() {
}
}

public class Sub extends Super {
public Sub() {
super();
}
}

显式无参数构造函数

public class Super {
public Super() {
}
}

public class Sub extends Super {
}

这是合法的。构造函数添加到 Sub 调用 Super 的默认构造函数。

带参数的显式构造函数

public class Super {
public Super(int i) {
}
}

public class Sub extends Super {
}

这是一个像你一样的编译错误。因为 Super 有一个构造函数,所以编译器不会自动添加无参构造函数。处理这个问题的方法是:

public class Super {
public Super(int i) {
}
}

public class Sub extends Super {
public Sub() {
super(0); // <-- explicit constructor call
}
}

关于Java:为什么扩展需要一个空的构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2726119/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com