Java viewholder类的继承

Java viewholder类的继承,java,android,generics,inheritance,Java,Android,Generics,Inheritance,我是一名android开发人员,我有一个关于android中一些OOP概念的问题。每当我们创建一个适配器(让我们拿一个回收器适配器…)时,我通常会这样做: public class MyAdapter extends RecyclerView.Adapter<"MyAdapter.MyViewHolder"> { public MyAdapter(){} public MyViewHolder onCreateViewHolder(ViewGroup parent,

我是一名android开发人员,我有一个关于android中一些OOP概念的问题。每当我们创建一个适配器(让我们拿一个回收器适配器…)时,我通常会这样做:

public class MyAdapter extends RecyclerView.Adapter<"MyAdapter.MyViewHolder">
{

    public MyAdapter(){}
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType){}
    public void onBindViewHolder(MyViewHolder holder, int position){}
    public class MyViewHolder extends RecyclerView.ViewHolder{}
公共类MyAdapter扩展了RecyclerView.Adapter { 公共MyAdapter(){} 公共MyViewHolder onCreateViewHolder(视图组父级,int-viewType){} public void onBindViewHolder(MyViewHolder,int位置){} 公共类MyViewHolder扩展了RecyclerView.ViewHolder{} 我的问题是,如果适配器中有MyViewHolder作为内部类(如上所述……),为什么必须声明为public/protected?每当我试图将类设置为private时,适配器类顶部就会出现一个错误:“packagename.MyAdapter.MyViewHolder在packagename.MyAdapter中具有私有访问权限”


从那时起,我一直在看教程(文本或视频)这解释了适配器是如何工作的,他们从来没有试图解释为什么MyViewHolder类需要声明为public。我真的很想了解这一点。

我想这是因为您返回了该类型-如果该类型是私有的,那么这样做没有意义。如果任何调用方只需要知道结果具有type
RecyclerView.ViewHolder
,您可以在CreateViewHolder()上声明
public RecyclerView.ViewHolder
不管你返回的对象是否真的是一个
MyViewHolder
.huuummm……我想你说得有道理。因为RecyclerView.Adapter类是公共静态的,通过制作RecyclerView.Adapter,我们实际上是在泛化该类。但是为什么现在当MyViewHolder类被声明为受保护时它还能工作呢??