java - 为什么 super() 构造函数不采用与父构造函数相同的参数?

标签 java android inheritance android-recyclerview constructor

我正在实现自定义回收器 View 来响应具有某些参数的类的实例。为此,我实现了 VieHolders。我创建了一个抽象 ViewHolder,这样我就可以传递两个要膨胀的布局。但是,当我从父类(super class)继承并尝试在抽象类上实现构造函数时,它不会采用具体类所需要的参数,并且我收到一条错误消息,指出父类没有可用的默认构造函数。

我期望的工作:

 private abstract class CrimeHolder extends RecyclerView.ViewHolder{
      public CrimeHolder(View view, ViewGroup parent, Boolean false){
           super(view, parent, false);
      }

然后从其扩展的类将执行以下操作:

 private class RegularCrimeHolder extends CrimeHolder{
      public RegularCrimeHolder(Inflater inflater, ViewGroup parent{
           super(inflater.inflate(R.layout.list_item_crime, parent, false));
      }
 }

但实际发生的情况是,CrimeHolder 无法将相同的参数传递给 super 构造函数作为具体类,否则我会得到“没有找到默认构造函数”,因此 CrimeHolder 的写法如下:

abstract class CrimeHolder extends RecyclerView.ViewHolder {
    private CrimeHolder(View view){
        super(view);
    }


}

尽管我必须为 CrimeHolder 编写的构造函数只接受一个 View 参数,但我仍然必须将完整的参数传递给 RegularCrimeHolder 中的 super 构造函数。为什么子类调用带有这么多参数的 super 构造函数?

最佳答案

What I'm expecting to work

RecyclerView.ViewHolder 的构造函数 takes a single View parameter 。您正在尝试传递三个参数。那不会编译。

And then the classes that extend from that would just do this

您的 CrimeViewHolder 构造函数采用三个参数。您的 RegularCrimeHolder 子类正在尝试传递单个参数。那不会编译。

Despite the fact that that the constructor I had to write for CrimeHolder only takes one View argument

不,super 调用需要一个参数。您声明的构造函数采用三个参数。

Why is the child class calling a super constructor with so many arguments?

据推测,您输入了该内容。看起来您尝试模仿 LayoutInflater 上的 inflate() 调用的参数列表。

将您的 CrimeHolder 重写为:

private abstract class CrimeHolder extends RecyclerView.ViewHolder{
  public CrimeHolder(View view){
       super(view);
  }

将您的RegularCrimeHolder重写为:

private class RegularCrimeHolder extends CrimeHolder{
      public RegularCrimeHolder(LayoutInflater inflater, ViewGroup parent) {
           super(inflater.inflate(R.layout.list_item_crime, parent, false));
      }
 }

关于java - 为什么 super() 构造函数不采用与父构造函数相同的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56612928/

相关文章:

c# - 将 'set' 添加到 C# 中的接口(interface)属性

java - 使用 Hibernate 迭代结果集而不立即加载所有结果的惯用方法是什么?

java - 一对多 SQL 关系

java - Tomcat 与 Azure 中的 MongoDB 通信时出现超时错误

c++ - C++中的结构继承与类继承

.net - 丢失的 VB6 源代码;是否可以覆盖另一个对象中的方法?

java - java泛型类中是否可以有可变数量的元素类型

android - 打包/Maven 化公共(public)软件组件

android - OkHttp 比 HttpUrlsConnection for android 更快还是更好?

android - 如何解决 "ERROR: libx264 not found"?