2010-12-01 6 views
16

Kann mir jemand sagen, wie kann ich das Objekt der abstrakten Klasse und Schnittstelle erstellen. Was ich weiß ist, dass wir die ABSRAKT-Klasse und Schnittstelle nicht intanieren können.create object of abstract class und interface

Danke und Grüße, gautam

Antwort

2

Sie schreiben eine Klasse, die von der abstrakten Klasse abgeleitet oder implementiert die Schnittstelle, und dann, dass instanziiert.

13

Sie können keine abstrakte Klasse oder Schnittstelle instanziieren - Sie können eine ihrer Unterklassen/Implementierer instanziieren.

Beispiele für solche Dinge sind typisch für die Verwendung von Java Collections.

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

Sie verwenden den Schnittstellentyp List<T> als Typ, aber die Instanz selbst ist ein ArrayList<T>.

1
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 { ... } 
3
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 
+0

foo() Methode in der abstrakten Klasse implementiert erfordert Schlüsselwort abstrakt, sonst wirft es Zeitfehler kompilieren. Es sollte so sein, public abstract void foo(); – user609239

4

Sie können eine Implementierung als eine anonyme Klasse bieten:

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

Ebenso eine anonyme Klasse kann eine übergeordnete Klasse erweitern, anstatt eine Schnittstelle zu implementieren (aber es kann nicht beides tun).

2

"instanziieren" bedeutet "Erzeuge ein Objekt von".

Sie können also keine direkt erstellen.

Der Zweck von Interfaces und abstrakten Klassen ist es, das Verhalten einiger konkreter Klassen zu beschreiben, die die Schnittstelle implementieren oder die abstrakte Klasse erweitern.

Eine Klasse, die eine Schnittstelle implementiert, kann von anderem Code verwendet werden, der nur über die Schnittstelle weiß, was Ihnen hilft, Verantwortlichkeiten zu trennen und sich darüber im Klaren zu sein, was Sie von dem Objekt erwarten. (Der aufrufende Code weiß nur, dass das Objekt alles in der Schnittstelle angegebene tun kann; es wird nichts über andere Methoden wissen.)

Wenn Sie jemand anderen Code verwenden, erwartet ein Fooable (wo das ist Name einer Schnittstelle), Sie werden nicht wirklich nach einem Objekt einer Fooable-Klasse gefragt (weil es nicht wirklich eine solche Klasse gibt). Sie werden nur nach einer Instanz einer Klasse gefragt, die Fooable implementiert, d. H. Die erklärt, dass sie alle Dinge in dieser Schnittstelle ausführen kann. Kurz gesagt, etwas, das "foo'd" werden kann.

2

Was Sie wissen, ist richtig. Sie können kein Objekt der abstrakten Klasse oder Schnittstelle erstellen, da sie unvollständig sind (Schnittstelle wird nicht einmal als Klasse betrachtet.)

Was Sie tun können, ist eine Unterklasse der abstrakten Klasse zu implementieren, die natürlich nicht sein muss abstrakt. Für die Schnittstelle müssen Sie eine Klasse erstellen, die die Schnittstelle implementiert und die Körper der Schnittstellenmethoden implementiert.

Hier sind orginal Tutorial auf Orakelstätte, http://download.oracle.com/javase/tutorial/java/IandI/abstract.html und http://download.oracle.com/javase/tutorial/java/concepts/interface.html

2

Es gibt zwei Möglichkeiten, wie Sie dies erreichen können.

1) Entweder Sie erweitern/implementieren die abstrakte Klasse/Schnittstelle in einer neuen Klasse, erstellen das Objekt dieser neuen Klasse und verwenden dann dieses Objekt nach Ihren Bedürfnissen.

2) Der Compiler ermöglicht es Ihnen, anonyme Objekte der Schnittstellen in Ihrem Code zu erstellen.

Für z. (neues Runnable() {...});

Hoffe, das hilft.

Grüße, Mahendra Liya.

8

Zum Objekt einer abstrakten Klasse zu erstellen, neuen verwenden wie Objekte von anderen nicht abstrakten Klassen mit nur einem kleinen Unterschied zu schaffen, wie folgt:

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()); 
    } 

} 

Auf der gleichen Weisen Sie ein Objekt erstellen kann von Interface-Typ, wie folgt:

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(); 
    } 

} 
+10

Das ist kein Objekt der abstrakten Klasse oder Schnittstelle. Das ist eine anonyme Klasse, die die abstrakte Klasse (Schnittstelle) erweitert (implementiert). Riesiger konzeptioneller Unterschied. – Deltharis

0

nein, wir Objekt aus einer Schnittstelle oder eine abstrakte Klasse, weil

nicht erstellen

Die Hauptabsicht, ein Objekt zu erstellen, besteht darin, die eingepackten Methoden und Daten zu verwenden. Als Schnittstelle haben keine konkrete Umsetzung daher können wir nicht.

Für abstrakte Klasse können wir konkrete Methode oder abstrakte Methode oder beides haben. Es gibt keine Möglichkeit für den API-Entwickler, die Verwendung der Methode einzuschränken, die keine Implementierung hat.

Hoffnung Hilfe.

+0

Sie können ein Objekt der Schnittstelle und abstrakte Klasse mit anonymen Klasse erstellen, siehe http://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html – Simmant

+0

Als es ist kein Objekt der Schnittstelle oder abstrakte Klasse. Es ist ein Objekt der anonymen Klasse. – Deltharis

0

Nein, Sie erstellen hier nicht die Instanz Ihrer abstrakten Klasse. Stattdessen erstellen Sie eine Instanz einer anonymen Unterklasse Ihrer abstrakten Klasse. Und dann rufen Sie die Methode für Ihre abstrakte Klassenreferenz auf, die auf das Unterklassenobjekt verweist.

0

Sie können nicht die abstrakte Klasse oder eine Schnittstelle instanziiert - Sie eine ihrer Subklassen/Implementierer instanziieren

Sie kann nicht eine abstrakte Klasse instanziiert oder eine Schnittstelle können Sie nur eine ihrer abgeleiteten Klassen instanziiert.

In Ihrem Beispiel

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

Du Instanziieren jede Klasse, die Suprising

Verwandte Themen