Discuss / Java / 打卡~

打卡~

Topic source

发现下面这个段报错

        try (Writer writer = new CharArrayWriter()) {
            writer.write(65);
            writer.write(66);
            writer.write(67);
            char[] data = writer.toCharArray(); // { 'A', 'B', 'C' }
        }



MyWriter.java:24: 错误: 找不到符号
            char[] data = writer.toCharArray(); // { 'A', 'B', 'C' }
                                ^
  符号:   方法 toCharArray()
  位置: 类型为Writer的变量 writer
1 个错误

改成这样就好了:

        try (CharArrayWriter writer = new CharArrayWriter()) {
            writer.write(65);
            writer.write(66);
            writer.write(67);
            char[] data = writer.toCharArray(); // { 'A', 'B', 'C' }
        }

有人知道为啥嘛??

可能是 writer上找不到这个方法。它是 CharArrayWriter上的方法

虽然根据面向对象的多态性, Write可以接收CharArrayWrite的实例, 但是也擦除了子类的特性, 比如toCharArray() 这个方法, 因此正确的做法是第二种, 用CharArrayWrite去接收对象

The__Wolf

#4 Created at ... [Delete] [Delete and Lock User]

父类Writer没有这个方法,这个地方不能用多态

The__Wolf

#5 Created at ... [Delete] [Delete and Lock User]

下面这里可以这样向上转型,因为后面用到的write方法在Writer就有的,所以这里可以用多态

try (Writer writer = new FileWriter("readme.txt", StandardCharsets.UTF_8)) {
    writer.write('H'); // 写入单个字符
    writer.write("Hello".toCharArray()); // 写入char[]
    writer.write("Hello"); // 写入String
}

保持热爱

#6 Created at ... [Delete] [Delete and Lock User]

父类的引用指向子类对象时,不能调用子类特有的方法

#7 Created at ... [Delete] [Delete and Lock User]

向上转型,只能使用父子共有方法


  • 1

Reply