Классы и интерфейсы

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

Например,
public class MyVisual {
 private String name;
. . . . . .
 public MyVisual (String n){
    name ="class - MyVisual object - "+n;
 }
 public void show() {
  System.out.println(name+" mehtod - show");
 }
. . . . . .
}

Задание 1.
1. Создать класс "прямоугольник" с методами show()  и hide().
2. Создать класс "кнопка" - наследник класса "прямоугольник". Добавить методы: unable(), disable(), isUnable().
3. Создать класс для тестирования класса "кнопка".

Задание 2.
1.Создать другой вариант класса "кнопка", который не является наследником класса "прямоугольник", а содержит
объект класса "прямоугольник" (композиция). В методах show() и hide() использовать делегирование (Делегирование - передача обязательств по выполнению операции другому классу/классам).
2. Создать класс для тестирования нового класса "кнопка".

Задание 3.
1. Создать интерфейс "фигура" с методами show()  и hide().
2. Создать классы "прямоугольник", "круг", "треугольник", реализующие интерфейс "фигура". 
3. Создать класс "кнопка". Объекты класса должны включать объект, имеющий интерфейс "фигура". 
Объект должен передаваться в конструктор класса "кнопка". В методах show() и hide() класса "кнопка" использовать делегирование.
4. Создать класс для тестирования кнопок, имеющих форму "прямоугольник", "круг", "треугольник".