Какие утверждения верны относительно абстрактных классов
Перейти к содержимому

Какие утверждения верны относительно абстрактных классов

  • автор:

Какие утверждения верны относительно абстрактных классов

Скачай курс
в приложении

Перейти в приложение
Открыть мобильную версию сайта

© 2013 — 2023. Stepik

Наши условия использования и конфиденциальности

Get it on Google Play

Public user contributions licensed under cc-wiki license with attribution required

Какие утверждения верны относительно абстрактных классов

Кроме обычных классов в Java есть абстрактные классы . Абстрактный класс похож на обычный класс. В абстрактном классе также можно определить поля и методы, но в то же время нельзя создать объект или экземпляр абстрактного класса. Абстрактные классы призваны предоставлять базовый функционал для классов-наследников. А производные классы уже реализуют этот функционал.

При определении абстрактных классов используется ключевое слово abstract :

public abstract class Human < private String name; public String getName() < return name; >>

Но главное отличие состоит в том, что мы не можем использовать конструктор абстрактного класса для создания его объекта. Например, следующим образом:

Human h = new Human();

Кроме обычных методов абстрактный класс может содержать абстрактные методы . Такие методы определяются с помощью ключевого слова abstract и не имеют никакой реализации:

public abstract void display();

Производный класс обязан переопределить и реализовать все абстрактные методы, которые имеются в базовом абстрактном классе. Также следует учитывать, что если класс имеет хотя бы один абстрактный метод, то данный класс должен быть определен как абстрактный.

Зачем нужны абстрактные классы? Допустим, мы делаем программу для обслуживания банковских операций и определяем в ней три класса: Person, который описывает человека, Employee, который описывает банковского служащего, и класс Client, который представляет клиента банка. Очевидно, что классы Employee и Client будут производными от класса Person, так как оба класса имеют некоторые общие поля и методы. И так как все объекты будут представлять либо сотрудника, либо клиента банка, то напрямую мы от класса Person создавать объекты не будем. Поэтому имеет смысл сделать его абстрактным.

public class Program < public static void main(String[] args) < Employee sam = new Employee("Sam", "Leman Brothers"); sam.display(); Client bob = new Client("Bob", "Leman Brothers"); bob.display(); >> abstract class Person < private String name; public String getName() < return name; >public Person(String name) < this.name=name; >public abstract void display(); > class Employee extends Person < private String bank; public Employee(String name, String company) < super(name); this.bank = company; >public void display() < System.out.printf("Employee Name: %s \t Bank: %s \n", super.getName(), bank); >> class Client extends Person < private String bank; public Client(String name, String company) < super(name); this.bank = company; >public void display() < System.out.printf("Client Name: %s \t Bank: %s \n", super.getName(), bank); >>

Другим хрестоматийным примером является система геометрических фигур. В реальности не существует геометрической фигуры как таковой. Есть круг, прямоугольник, квадрат, но просто фигуры нет. Однако же и круг, и прямоугольник имеют что-то общее и являются фигурами:

// абстрактный класс фигуры abstract class Figure < float x; // x-координата точки float y; // y-координата точки Figure(float x, float y)< this.x=x; this.y=y; >// абстрактный метод для получения периметра public abstract float getPerimeter(); // абстрактный метод для получения площади public abstract float getArea(); > // производный класс прямоугольника class Rectangle extends Figure < private float width; private float height; // конструктор с обращением к конструктору класса Figure Rectangle(float x, float y, float width, float height)< super(x,y); this.width = width; this.height = height; >public float getPerimeter() < return width * 2 + height * 2; >public float getArea() < return width * height; >>

Вопрос №2254 от пользователя Тимофей Найданов в уроке «Абстрактные классы», курс «PHP: ООП»

Тесты к этому уроку. вопрос: Выберите верное утверждение:

  1. Абстрактный класс может не содержать абстрактных методов
  2. Абстрактный класс может наследоваться от абстрактного класса
  3. Абстрактный класс не может реализовывать интерфейс

Правильный ответ 2. В практике по этому уроку в решении учителя нет абстрактных методов, и оно работает. Соответственно вариант 1 тоже верен. А выбрать можно только 1 вариант ответа.

Тут дело вот в чем, абстрактный класс действительно не может быть без абстрактных методов, но если он реализует интерфейс (не весь), то описание методов в интерфейсе, становятся абстрактными методами для этого абстрактного класса. Я в видео это не осветил, но добавлю в текстовое описание.

Разве абстрактный класс не может быть без абстрактных методов (допустим он не реализует интерфейса), насколько я знаю нельзя создать экземпляр данного класса, а абстрактные методы у него могут быть, а могут не быть. По ссылке к уроку на мануал к PHP в User Contributed Notes есть даже пример ` >

Да вы правы, у меня видимо был солнечный удар когда я делал этот тест).

Программирование на Java — ответы

От какого класса наследуются классы двумерных массивов?

Для чего можно использовать java.util.Collections ?

Какие утверждения относительно класса BufferedInputStream верны?

Какие утверждения относительно пакетов в Java верны?

Какой из следующих вариантов кода будет скомпилирован без ошибок

Наследование это:

Какие утверждения относительно java.util.StringTokenizer корректны?

Какие классы и интерфейсы, необходимые для поддержки многопоточности, определены в пакете java.lang ?

Что означает термин «строгая типизация»?

Что будет выведено на экран в результате выполнения следующего кода?

import java.awt.Point; public class Obscuring < static Point Test = new Point(3,2); public static void main (String s[]) < System.out.println(Test.x); >> class Test

Дан следующий класс:

class abc.Point < abc.Point(int a, int b) < x = a; y = b; >int x, y; . >

Укажите результат выполнения следующего фрагмента кода:

abc.Point p = new abc.Point(5,3), p1; p1 = p; p = null; System.out.println(p.x);

Что нужно подставить вместо знаков подчеркивания, чтобы программа вывела на экран «000» ?

public class SomeClass < public static void main(String[] args) < ____ for (int i = 0; i < b.length; i++) < System.out.print(b[i]); >> >

Сколько объектов порождается при инициализации массива new int[][3] ?

Каким может быть результат работы следующего кода?

public abstract class SomeClass implements Runnable < private Object lock = new Object(); public void lock() < synchronized (lock) < try < System.out.print("1"); lock.wait(); >catch (InterruptedException e) <> > > public void unlock() < synchronized (lock) < lock.notify(); System.out.print("2"); >> public static void main(String s[]) < new Thread(new SomeClass() < public void run() < lock(); >>).start(); new Thread(new SomeClass() < public void run() < unlock(); >>).start(); > >

Инкапсуляция это:

Предположим, вы моделируете автомобиль, описывая его свойства в формате Java-класса. Какие из следующих полей нужно объявить динамическими?

Для чего нужны классы-обертки?

Зачем нужен полиморфизм?

Какие классы, помогающие взаимодействовать с программным окружением, определены в пакете java.lang ?

Какие утверждения относительно модуля компиляции верны?

Отметьте ключевые слова языка Java :

Что произойдет при попытке к одному объекту PipedWriter несколько раз присоединять объекты PipedReader ?

Какие утверждения относительно клонирования верны?

Какие из следующих адресов относятся к подсети класса c ?

Какие из перечисленных идентификаторов являются корректными?

Предположим, нам необходимо создать собственную иерархию исключений. Рассмотрим следующий пример.

Exception | +--LengthException | +--TooLongException | +--TooShortException 1 class BaseMeasurer < 2 int measureLength(Dimension d) throws TooShortException3 > 4 class DerivedMeasurer extends BaseMeasurer < 5 ___ < 6 >7 >

Какое из перечисленных ниже выражений можно использовать в строке 5 вместо знаков подчеркивания, чтобы код успешно откомпилировался?

Какие операторы есть в языке Java :

Какие утверждения относительно физического уровня OSI верны?

Какие методы есть в классе Object ?

Назовите сете-зависимые уровни модели OSI

Какие утверждения относительно языка Java верны:

Какие из следующих утверждений верны?

Какие утверждения относительно компилятора JIT ( Just in Time ) верны?

Какие из перечисленных свойств являются общими для программ, написанных на C++ и Java ?

На какие направления разделяется платформа Java 2 ?

Какие меры позволяют Java обеспечивать безопасность?

Какие утверждения относительно автоматического сборщика мусора ( garbage collector ) верны?

Что из перечисленного является недостатком ООП?

Какие утверждения относительно объектов верны?

Что такое класс?

Какие возможны отношения между классами?

Какой класс в Java является метаклассом?

Сколько комментариев в следующем примере кода:

int x = 0; /* text // text */int y=1; // text */ // text */

Какие из вариантов являются строчными комментариями?

Укажите варианты кода, которые будут скомпилированы без ошибок

Отметьте целочисленные литералы языка Java :

Отметьте строковые литералы языка Java :

Какие из перечисленных идентификаторов являются корректными?

Какой вариант кода выведет на экран значение true ?

Какие варианты объявления дробной переменной верны (никакие переменные предварительно не объявлены)?

Укажите результат выполнения следующего фрагмента кода:

int a = 5; int b = 6; ++a = b++; System.out.println(a);

Дан следующий класс:

class abcPoint < abcPoint(int a, int b) < x = a; y = b; >int x, y;. >

Укажите результат выполнения следующего фрагмента кода:

abcPoint p = new abcPoint(5,3), p1 = p;p.x = 4;System.out.println(p1.x);

Какие значения может принимать переменная булева типа?

Выберите какой тип нужно поставить вместо знака ? для переменной d в следующем фрагменте:

int a = 1; short b = 1; long c = 1; ? d = a + b;

Даны следующие классы:

class abc.SomeClass <> class abc.SomeClass2 extends abc.SomeClass <>

Что будет выведено на экран в следующем фрагменте кода:

abc.SomeClass x1 = new abc.SomeClass(); abc.SomeClass2 x2 = new abc.SomeClass2(); System.out.println((x1 instanceof abc.SomeClass) + " " + (x2 instanceof abc.SomeClass2));

Какие утверждения относительно класса java.lang.Object верны

Какое из перечисленных ниже имен является составным?

Object java.lang lang java.lang.Object

Вы создали класс Animal в пакете ru.animal . Где будет храниться исходный код класса в файловой системе?

Какие утверждения относительно импорт-выражений верны?

Ниже приведено несколько вариантов записи модуля компиляции. Какой из них корректен, если предполагается описать класс abc.Point из пакета test.demo , причем класс активно использует классы ru.additional.abc и несколько классов из пакета java.net ?

Корректен ли объявленный ниже класс? Если нет, то как его можно исправить?

class Box < private int weight=0; public int getWeight() < return weight; >void setWeight(int weight) < this.weight=weight; >>

Какие формальные нарушения соглашений по именованию присутствуют в следующем примере:

public class Flat < private int floor_number; private int roomNumber; public int rooms() < return roomNumber; >public int getFloorNumber() < return floor_number; >>

Какие модификаторы позволяют обращаться к элементу класса из классов-наследников того же пакета?

Для каких элементов в Java можно указать модификатор доступа?

Какие варианты кода не вызовут ошибку компиляции?

Какие утверждения относительно полей класса верны?

Укажите варианты кода, которые не вызовут ошибки компиляции.

Какие утверждения относительно конструкторов класса верны?

Какие утверждения относительно инициализаторов класса верны?

Укажите правильные варианты объявления перегруженных методов.

Укажите количество преобразований, которые будут сделаны в следующем коде:

long a = 3; a = 5 + a; System.out.print("a /course_645/298104">   

Какие утверждения относительно преобразования примитивных типов верны?

Будет ли скомпилирован следующий пример:
byte b = 100 - 100; b = 100 + 200; b = 100 * 100;

Какие преобразования не вызовут ошибку компиляции?

Пусть классы Wolf и Rabbit являются наследниками класса Animal . Корректен ли следующий пример?

Wolf w = new Wolf(); Animal a = (Animal)w; Rabbit r = (Rabbit)a;

Какие из следующих присвоений корректны?

Укажите результат выполнения следующего кода:

public class SomeClass < public static void main(String[] args) < SomeClass c = new SomeClass(); c.f1(1, 1); >public void f1(byte b, char c) < System.out.println("1"); >public void f1(byte b, byte c) < System.out.println("2"); >public void f1(char b, char c) < System.out.println("3"); >public void f1(char b, byte c) < System.out.println("4"); >>

На объект какого типа будет ссылаться переменная c ?

public class SomeClass < public static void main(String[] args) < SomeClass c = new SomeClass2(); >>class SomeClass2 extends SomeClass <>

Предположим, вы моделируете автомобиль, описывая его свойства в формате Java-класса. Какие из следующих полей нужно объявить статическими?

Какой из следующих вариантов кода выведет на экран "perform" ?

Какой из следующих вариантов кода будет скомпилирован без ошибок

Что будет выведено на экран в результате выполнения следующего кода:

public class SomeClass < public void perform() < this.perform(1); System.out.print("1"); >public void perform(int val) < System.out.print(val); >public static void main(String[] args) < SomeClass c = new SomeClass2(); c.perform(4); >> class SomeClass2 extends SomeClass < public void perform() < super.perform(); System.out.print("3"); >public void perform(int val) < super.perform(); System.out.print(val); >>

Можно ли при наследовании не реализовывать абстрактный метод родительского класса?

Укажите корректный вариант кода

Для какого элемента класса работает полиморфизм?

Какое значение появится на консоли после выполнения следующей программы?

class Parent < static int x = 2; static public void print() < System.out.println(x); >> class Child extends Parent < static int x = 3; public static void main(String[] args) < Parent c = new Child(); c.print(); >>

Сколько ошибок компиляции и ошибок времени выполнения в следующем примере?

int b[] = new int[5]; for (int i = 0; i

Что нужно подставить вместо знаков подчеркивания, чтобы программа вывела на экран "000" ?

public class SomeClass < public static void main(String[] args) < ____ for (int i = 0; i < b.length; i++) < System.out.print(b[i]); >> >

Какое утверждение относительно приведения массивов верно?

Какой метод сгенерирует ошибку ArrayStoreException при передаче в него массива v ?

public class Vehicle < public static void main(String[] args) < Vehicle[] v = new Car[] < new Car()>; . > public void setVehicles(Vehicle c[]) < c[0] = new Vehicle(); >public void setVehicles2(Vehicle c[]) < if (c[0] instanceof Vehicle) < c[0] = new Car(); >> public void setVehicles3(Vehicle c[]) < if (c[0] instanceof Car) < c[0] = new Vehicle(); >> > class Car extends Vehicle<>

Может ли массив основываться на абстрактных классах? Интерфейсах?

Какие утверждения относительно клонирования верны?

Что будет выведено на экран в результате выполнения следующего кода:

public class SomeClass < public static void main(String[] args) < int a[] = ; int b[] = (int[]) a.clone(); a[0] = 0; System.out.print(b[0]); System.out.print(b[1]); System.out.print(b[2]); > >

Что будет выведено на экран в результате выполнения следующего кода:

public class SomeClass < static int x; public static void main(String[] args) < SomeClass s = new SomeClass(); s.test(5); System.out.println(x); >private void test(int x) < this.x = x + 5; System.out.print(x); >>

Приведенная ниже программа должна вывести на консоль Hello World! Выберите строки, которые нужно модифицировать в вашей программе, чтобы получить правильный результат.

1 public class SomeClass ;4 String result = "";5 int i = 0;6 . 7 System.out.print(arr[i]);8 >9 >

Есть следующий код:

public class SomeClass < public static void main(String[] args) < SomeClass t = new SomeClass(); ____ >private int check(String x, int n) < if (n == 0) return n; else if (n == 1) < if (x != null) return 5; >else if (n == 2 && x != null) < if (x.equals("YES")) return 3; else if (x.equals("NO")) return 4; >return -1; > >

Если вместо знаков подчеркивания поместить код вызова метода check, то какое из предложений будет верным?

Что будет выведено на экран в результате выполнения следующего кода:

public class SomeClass < public static void main(String[] args) < SomeClass t = new SomeClass(); t.say(3); >private void say(int digit) < switch (digit) < case 1: System.out.print("ONE"); break; case 2: System.out.print("TWO"); case 3: System.out.print("THREE"); default: System.out.print("Unknown"); >> >

Что будет выведено на экран в результате выполнения следующего кода:

public class SomeClass < public static void main(String[] args) < int i = 0; do < if (i >5) i--; if (i < 4) i++; if (i == 5) i++; i++; System.out.print(i); >while (i >

Что будет выведено на экран в результате выполнения следующего кода:

public class Test < public static void main(String[] args) < Test t = new Test(); t.test(); >void test() < Test:< test: for (int i = 0; true; i++) < if (i % 2 == 0) continue test; if (i >10) break Test; System.out.print(i); > > > >

Есть следующая иерархия наследования:

java.lang.Object | +--java.lang.Throwable | +--java.lang.Exception | +--java.lang.RuntimeException | +--java.lang.IndexOutOfBoundsException | +--java.lang.StringIndexOutOfBoundsException | +--java.lang.ArrayIndexOutOfBoundsException

В методе testSomеValue могут быть возбуждены исключения StringIndexOutOfBoundsException и ArrayIndexOutOfBoundsException , при этом они не обрабатываются в блоке try – catch . Какие из перечисленных ниже утверждений будут верными?

Предположим, нам необходимо создать собственную иерархию исключений. Рассмотрим следующий пример.

Exception | +--LengthException | +--TooLongException | +--TooShortException 1 class BaseMeasurer < 2 int measureLength(Dimension d) throws TooLongException3 > 4 class DerivedMeasurer extends BaseMeasurer < 5 ___ < 6 >7 >

Какое из перечисленных ниже выражений можно использовать в строке 5 вместо знаков подчеркивания, чтобы код успешно откомпилировался?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *