Java:如何从Java.io为Reader类创建新的类对象(当它保护构造函数时)

Java:如何从Java.io为Reader类创建新的类对象(当它保护构造函数时),java,class,constructor,protected,Java,Class,Constructor,Protected,我想为java的Reader类创建一个新的类对象,但是我无法访问构造函数,因为它是受保护的 这是行不通的 通常,我会创建一个新函数来访问该构造函数,但由于该函数是java默认库的一部分,我如何访问它?感谢您的帮助。Reader是一个抽象类。您不能实例化它,只是为了创建子类实例 你是说 Reader myReader = new InputStreamReader(in, "UTF-8"); 是一个抽象类,因此您必须实例化它的实现,例如or。正如其他人所说,您可以创建Reader的子类的实例,

我想为java的Reader类创建一个新的类对象,但是我无法访问构造函数,因为它是受保护的

这是行不通的


通常,我会创建一个新函数来访问该构造函数,但由于该函数是java默认库的一部分,我如何访问它?感谢您的帮助。

Reader是一个抽象类。您不能实例化它,只是为了创建子类实例

你是说

Reader myReader = new InputStreamReader(in, "UTF-8");

是一个抽象类,因此您必须实例化它的实现,例如or。

正如其他人所说,您可以创建
Reader
的子类的实例,例如
BufferedReader

如果您不想使用Reader的子类,您可以创建
Reader
的实例,如下所示

Reader reader = new Reader() {

        @Override
        public int read(char[] cbuf, int off, int len) throws IOException {
            // TODO Auto-generated method stub
            return 0;
        }

        @Override
        public void close() throws IOException {
            // TODO Auto-generated method stub

        }};
如果选中,您可以看到
Reader
的具体子类,并根据您的需求对其中任何一个进行初步分析。你不能像它是抽象的那样,使用即时的
Reader


BufferedReader
CharArrayReader
FilterReader
InputStreamReader
PipedReader
StringReader这里有个问题要问你。当您调用
read()
时,您期望Reader类的(假设的)实例实际会做什么?它从何处获得字符?+1,用于演示子类(这是一个匿名的子类)可以调用受保护的构造函数。@Thilo感谢您的评论。是的,它实际上创建了一个匿名子类实例。当然,子类实例是超类实例。本例中的“in”是什么?
in
是InputStreamReader应该从中读取的InputStream中找不到符号”。此处中的未定义,因此通过导入导入静态java.lang.System.in来解决此问题,后者执行此任务。
Reader reader = new Reader() {

        @Override
        public int read(char[] cbuf, int off, int len) throws IOException {
            // TODO Auto-generated method stub
            return 0;
        }

        @Override
        public void close() throws IOException {
            // TODO Auto-generated method stub

        }};