LINUX.ORG.RU

интерфейс + абстрактный класс

 


0

1

в книге пример и не работает. Пишет:

project.java:67: error: Incomplete is abstract; cannot be instantiated
interface Callback {
  void callback(int param);
}

class Client implements Callback {
  // реализовать интерфейс Callback
  public void callback(int p) {
    System.out.println("Метод callback() "
                       + " вызываемый со значением " + p);
  }

  public void callback1(int p) {
    System.out.println("Метод callback() "
                       + " вызываемый со значением " + p);
  }
}

// еще одна реализация интерфейса Callback
class AnotherClient implements Callback {
  // реализовать интерфейс Callback
  public void callback(int p) {
    System.out.println("еще один варинат метода callback()");
    System.out.println("p в квадрате равно " + (p * p));
  }

  public void callback1(int p) {
    System.out.println("еще один варинат метода callback1()");
    System.out.println("p в квадрате равно " + (p * p));
  }
}

abstract class Incomplete implements Callback {
  // int a, b;
  // a = 12;
  // b = 14;
	int a = 12;
	int b = 14;

  void show() { System.out.println(a + " " + b); }
}

class HelloWorld {
  public static void main(String args[]) {
    // Balance test = new Balance("some", -12);
    // test.show();
    // Demo test = new Demo();
    // System.out.println(test);

    // Callback test = new Client();
    // test.callback(12);
    // test.callback1(2);

    // Callback c = new Client();
    // AnotherClient ob = new AnotherClient();
    // c.callback(42);

    // c = ob; // теперь переменная с ссылается на объект типа AnotherClient
    // c.callback(42);
    // c.callback1(33);
    Callback test = new Incomplete();
    test.show();
  }
}
★★★★

abstract class

Ну ты ж сам указал, что это заготовка для класса. Его нельзя инстанцировать.

anonymous
()

Все правильно пишет, абстрактный класс не может быть инстанцирован, может ты что-то проглядел, например в книге может быть написано:

Callback test = new Incomplete() { };

Здесь создается анонимный класс-наследник от Incomplete.

Aber ★★★★★
()
Ответ на: комментарий от bryak

Если наследник реализует все методы, абстракт можно убрать. Ничего общего с virtual тут нет.

anonymous
()
Ответ на: комментарий от anonymous

убираем abstract из Incomplete

project.java:39: error: Incomplete is not abstract and does not override abstract method callback(int) in Callback
bryak ★★★★
() автор топика
Ответ на: комментарий от anonymous

в кни_г(украинская гэ)e (Шилдт Герберт. Java. Полное руководство 2018) написано

Если класс включает в себя интерфейс, но не полностью реализует
определенные в нем методы, он должен быть объявлен как abstract
bryak ★★★★
() автор топика
Последнее исправление: bryak (всего исправлений: 1)
Ответ на: комментарий от bryak
interface Callback {
  void callback(int param);

abstract class Incomplete implements Callback {
    int a = 12;
    int b = 14;

    void show() { System.out.println(a + " " + b); }
}

class Client extends Incomplete {
  public void callback(int p) {
    System.out.println("Метод callback() "
                       + " вызываемый со значением " + p);
  }
}

class HelloWorld {
  public static void main(String args[]) {

    Callback test = new Client();
    test.callback(12);
    // test.show(); // error, interface Callback does not declare method show() 

    Incomplete test2 = new Client();
        test2.callback(12);
        test2.show();

  }


olelookoe ★★★
()
Ответ на: комментарий от bryak

все правильно написано, только абстрактные классы нельзя инстанцировать, а ты пытаешь инстанцировать именно абстрактный класс.

Int64 ★★★
()
Ответ на: комментарий от Int64

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

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.