Подтвердить что ты не робот

Как создать объект абстрактного класса и интерфейс

Как мне создать объект абстрактного класса и интерфейс? Я знаю, что мы не можем создать экземпляр объекта абстрактного класса напрямую.

4b9b3361

Ответ 1

Вы не можете создать экземпляр абстрактного класса или интерфейса - вы можете создать экземпляр одного из своих подклассов/исполнителей.

Примеры такой вещи типичны при использовании коллекций Java.

List<String> stringList = new ArrayList<String>();

Вы используете тип интерфейса List<T> как тип, но сам экземпляр ArrayList<T>.

Ответ 2

Чтобы создать объект абстрактного класса, просто используйте новый так же, как создание объектов других не абстрактных классов только с одним небольшим различием:

package com.my.test;

public abstract class MyAbstractClass {
    private String name;

    public MyAbstractClass(String name)
    {
        this.name = name;
    }

    public String getName(){
        return this.name;
    }


}

package com.my.test;

public class MyTestClass {

    public static void main(String [] args)
    {
        MyAbstractClass ABC = new MyAbstractClass("name") {
        };

        System.out.println(ABC.getName());
    }

}

Таким же образом вы можете создать объект типа интерфейса, как показано ниже:

package com.my.test;

public interface MyInterface {

    void doSome();
    public abstract void go();

}

package com.my.test;

public class MyTestClass {

    public static void main(String [] args)
    {

        MyInterface myInterface = new MyInterface() {

            @Override
            public void go() {
                System.out.println("Go ...");

            }

            @Override
            public void doSome() {
                System.out.println("Do ...");

            }
        };

        myInterface.doSome();
        myInterface.go();
    }

}

Ответ 3

Вы можете обеспечить реализацию как анонимный класс:

new SomeInterface() {
    public void foo(){
      // an implementation of an interface method
    }
};

Аналогично, анонимный класс может расширять родительский класс вместо реализации интерфейса (но он не может обойти оба).

Ответ 4

public abstract class Foo { public abstract void foo(); }
public interface Bar { public void bar(); }
public class Winner extends Foo implements Bar {
  @Override public void foo() { }
  @Override public void bar() { }
}
new Winner(); // OK

Ответ 5

Есть два способа добиться этого.

1) Либо вы расширяете/реализуете абстрактный класс/интерфейс в новом классе, создаете объект этого нового класса, а затем используете этот объект в соответствии с вашими потребностями.

2) Компилятор позволяет создавать анонимные объекты интерфейсов в вашем коде.

Например, (новый Runnable() {...});

Надеюсь, что это поможет.

С уважением, Махендра Лия.

Ответ 6

Вы пишете класс, который происходит из абстрактного класса или реализует интерфейс, а затем создайте его.

Ответ 7

"экземпляр" означает "создать объект".

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

Цель интерфейсов и абстрактных классов - описать поведение какого-либо конкретного класса, реализующего интерфейс, или расширяет абстрактный класс.

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

Если вы используете код другого пользователя, ожидающий Fooable (где это имя какого-либо интерфейса), вас действительно не спрашивают об объекте некоторого класса Fooable (потому что на самом деле такого класса нет). Вас спрашивают только о экземпляре некоторого класса, который реализует Fooable, то есть заявляет, что он может выполнять все действия в этом интерфейсе. Короче говоря, что-то, что "может быть Foo'd".

Ответ 8

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

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

Вот оригинальная обучающая программа на сайте oracle, http://download.oracle.com/javase/tutorial/java/IandI/abstract.html и http://download.oracle.com/javase/tutorial/java/concepts/interface.html

Ответ 9

public abstract class AbstractClass { ... }

public interface InterfaceClass { ... }

// This is the concrete class that extends the abstract class above and
// implements the interface above.  You will have to make sure that you implement
// any abstract methods from the AbstractClass and implement all method definitions
// from the InterfaceClass
public class Foo extends AbstractClass implements InterfaceClass { ... }

Ответ 10

НЕТ, мы не можем создать объект из интерфейса или абстрактного класса, потому что

Основное намерение создания объекта - использовать обернутые методы и данные. Поскольку интерфейс не имеет какой-либо конкретной реализации, мы не можем.

Для абстрактного класса мы можем иметь конкретный метод или абстрактный метод или и то, и другое. Разработчику API не существует возможности ограничить использование метода, который не имеет реализации.

Надеемся на помощь.

Ответ 11

Нет, вы не создаете экземпляр вашего абстрактного класса здесь. Скорее вы создаете экземпляр анонимного подкласса вашего абстрактного класса. И затем вы вызываете метод в своей абстрактной ссылке класса, указывающей на объект подкласса.

Ответ 12

Вы не можете создать экземпляр абстрактного класса или интерфейса - вы можете создать экземпляр одного из своих подклассов/исполнителей

Невозможно создать экземпляр абстрактного класса или интерфейса, который вы можете создать только один из их производных классов.

В вашем примере

 MyAbstractClass ABC = new MyAbstractClass("name") {
    };

Вы создаете экземпляр любого класса, который реализует Suprising