в коде у нас есть такие строки:
Object object = new Circle( ) ;
Movable movable = (Movable) obj ;
Drawable drawable = new Rectangle ;
--------------
1 строка. Мы делаем восходящее преобразование. Наш объект не может использовать методы класса Circle. И я так понимаю он становится объектом класса Object.
2 строка. Мы делаем низходящее преобразование с этим объектом. И здесь мне не понятно. Интерфейсы не могут иметь своих объектов (как Я понял) а здесь мы интерфейсной переменной присуждаем объект. Получается он может использовать методы только интерсейсов??? а там их нет(пока).
3 строка. Вполне нормальное создание объекта. Она ссылается на объект класса который она реализует. И она имеет доступ лишь к тем, которые объявлены в реализуемом классе.
Вопрос:
#Почему Я не могу вызвать у интерфейсной переменной ссылающейся на объект своего класса метод, который объявлен в этом интерфейсе. (object.draw( ) ;)
#Почему правильное решение заставляет меня заново писать вторую строку (Movable) object
Всё получится 😀
package com.javarush.task.task14.task1412;
/*
Реализовать метод printMainInfo
*/
public class Solution {
public static void main(String[] args) {
Object obj = new Circle();
Movable movable = (Movable) obj;
Drawable drawable = new Rectangle();
printMainInfo(drawable);
printMainInfo(movable);
}
public static void printMainInfo(Object object) {
//напишите тут ваш код
if (object instanceof Drawable) {}
//object = new Rectangle();{}
//object.draw();}
else{
object = new Circle();
object.move();}
}
static interface Movable {
void move();
}
static class Circle implements Movable {
public void draw() {
System.out.println("Can be drawn");
}
public void move() {
System.out.println("Can be moved");
}
}
static interface Drawable {
void draw();
}
static class Rectangle implements Drawable {
public void draw() {
System.out.println("Can be drawn");
}
public void move() {
System.out.println("Can be moved");
}
}
}