interface NewVerbose extends Verbose, Runnable {
// ...
}
n Допускается сокрытие констант
n Переопределение метода не несет семантической нагрузки
n Совпадение имен наследуемых методов не несет семантической нагрузки
Реализация интерфейсов классами
Class MyNewThread
extends MyThread
implements Runnable, Verbose {
...
}
n Интерфейсы реализуются классами
n Класс может реализовывать несколько интерфейсов
n Если класс не реализует все методы «наследуемых» интерфейсов, он является абстрактным
Интерфейс или абстрактный класс?
n Интерфейсы обеспечивают инструментарий безопасного множественного наследования, производный класс способен наследовать одновременно несколько интерфейсов
n Класс может расширять единственный базовый класс, даже если тот содержит только абстрактные методы
Интерфейс или абстрактный класс?
n Абстрактный класс частично может быть реализован, он вправе содержать члены, помеченные как protected и/или static и т.п.
n Структура интерфейса ограничена объявлениями public-констант и public-методов без какой бы то ни было реализации
Ссылки интерфейсных типов
n Допускаются ссылки интерфейсных типов
n Такая ссылка позволяет выполнять над объектом операции, описанные во внешнем контракте, обусловленном типом интерфейса
n Такое средство существенно расширяет возможности полиморфизма и полиморфного принципа открытости/закрытости
Использование типов
n Ссылочные типы
n Неявное приведение
n Явное приведение
MyNewThread mnt = new MyNewThread();
MyThread mt = mnt;
Runnable r1 = mnt;
Runnable r2 = mt; // Ошибка!!!
mnt = ( MyNewThread ) mt ; // Возможен выброс исключения
mnt = (MyNewThread)r1; // ClassCastException
Вопрос 44 Потоки данных, классификация. Базовые типы и их функциональность. 2-3,5-9, 11. Лекция Механизмы ввода-вывода информации. Понятие сериализации.
Традиционно, проблемы!
n Система ввода/вывода не должна зависеть от платформы!
n Применяется модель потоков данных:
l упорядоченная последовательность данных,
l которой соответствует определенный источник (потоки ввода) или получатель (потоки вывода)
Разновидности потоков
Класс InputStream
n abstract int read() throws IOException
n int read(byte[] b, int off, int len) throws IOException
n int read(byte[] b) throws IOException
n long skip(long n) throws IOException
n int available() throws IOException
n void close() throws IOException
Класс OutputStream
n abstract void write(int b) throws IOException
n void write(byte[] b, int off, int len) throws IOException
n void write(byte[] b) throws IOException
n void flush() throws IOException
n void close() throws IOException
Класс Reader
n int read() throws IOException
n abstract int read(char[] b, int off, int len) throws IOException
n int read(char[] b) throws IOException
n long skip(long n) throws IOException
n boolean ready () throws IOException
n abstract void close() throws IOException
Класс Writer
n void write(int ch) throws IOException
n abstract void write(char[] b, int off, int len) throws IOException
n void write(char[] b) throws IOException
n void write(String str, int off, int len) throws IOException
n void write(String str) throws IOException
n abstract void flush() throws IOException
n abstract void close() throws IOException
Дата: 2019-07-30, просмотров: 228.