Почему следующий код может вызывать абстрактный метод без его реализации? - PullRequest
0 голосов
/ 22 июня 2019

Эта программа направлена ​​на создание компонента с графическим интерфейсом, который отображает объем общего пространства, доступное пространство и процент от общего объема доступного пространства:

package com.java24hours;

import java.io.IOException;
import java.nio.file.*;
import javax.swing.*;

public class FreeSpacePanel extends JPanel {
    JLabel spaceLabel = new JLabel("Disk space: ");
    JLabel space = new JLabel();

    public FreeSpacePanel() {
        super();
        add(spaceLabel);
        add(space);
        try {
            setValue();
        } catch (IOException ioe) {
            space.setText("Error");
        }
    }

    private final void setValue() throws IOException {
        // get the current file storage pool
        Path current = Paths.get("");
        FileStore store = Files.getFileStore(current);
        // find the free storage space
        long totalSpace = store.getTotalSpace();
        long freeSpace = store.getUsableSpace();
        // get this as a percentage (with two digits)
        double percent = (double)freeSpace / (double)totalSpace * 100;
        percent = (int)(percent * 100) / (double)100;
        // set the label's text
        space.setText(freeSpace + " free out of " + totalSpace + " ("
            + percent + "%)");
    }
}

Вы можете увидеть, как создается объект FileStore с именем 'store', затем в следующих строках методы FileStore getTotalSpace() и getUseableSpace() вызываются напрямую без реализации.Однако класс FileStore объявляет эти методы абстрактными, так как это возможно?

1 Ответ

3 голосов
/ 22 июня 2019

Files.getFileStore возвращает экземпляр некоторого неабстрактного подкласса FileStore, который реализует требуемые методы.

Чтобы увидеть, что это за класс, выполните:

System.out.println(store.getClass());

Onмоя система Linux, я вижу, объект является экземпляром класса sun.nio.fs.LinuxFileStore.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...