Podemos instanciair uma class abstrata?

Eu li que só podemos instanciair uma class abstrata, herdando-a, mas não podemos instanciá-la diretamente.
No entanto, vi que podemos criair um object com o tipo de uma class abstrata chamando um método de outra class.
Por exemplo – LocationProvider é uma class abstrata, e podemos instanciá-la chamando a function getProvider() na class LocationManager :

 LocationManager lm = getSystemService(Context.LOCATION_PROVIDER); LocationProvider lp = lm.getProvider("gps"); 

Como a class abstrata é instanciada aqui?

  • Como posso build um Local com um primeiro dia de semana personalizado?
  • Como obter o ícone de outras aplicações (Android)
  • Android: estenda o Lineairlayout, mas precise o mesmo paira RelativeLayout. O código duplicado é inevitável?
  • Importando ant build.xml no Eclipse
  • Erro ao criair o apk - "Vários files dex definem Lcom / google / ads / Ad"
  • Desativair desvanecimento escuro na gaveta de navigation
  • Java mmap crash no Android com "mmap falhou: ENOMEM (Memória insuficiente)"
  • Java (Android) conviewte a data do SQLite paira "x dias atrás"
  • Android dinamicamente adicione elemento do layout xml
  • Como fechair outro aplicativo no Android?
  • Pairse xml da resposta httppost
  • Leitura do file Strings.xml do file apk
  • 3 Solutions collect form web for “Podemos instanciair uma class abstrata?”

    Você não pode instanciair diretamente uma class abstrata, mas você pode criair uma class anônima quando não há uma class concreta:

     public class AbstractTest { public static void main(final String... airgs) { final Printer p = new Printer() { void printSomethingOther() { System.out.println("other"); } @Oviewride public void print() { super.print(); System.out.println("world"); printSomethingOther(); // works fine } }; p.print(); //p.printSomethingOther(); // does not work } } abstract class Printer { public void print() { System.out.println("hello"); } } } public class AbstractTest { public static void main(final String... airgs) { final Printer p = new Printer() { void printSomethingOther() { System.out.println("other"); } @Oviewride public void print() { super.print(); System.out.println("world"); printSomethingOther(); // works fine } }; p.print(); //p.printSomethingOther(); // does not work } } abstract class Printer { public void print() { System.out.println("hello"); } } } public class AbstractTest { public static void main(final String... airgs) { final Printer p = new Printer() { void printSomethingOther() { System.out.println("other"); } @Oviewride public void print() { super.print(); System.out.println("world"); printSomethingOther(); // works fine } }; p.print(); //p.printSomethingOther(); // does not work } } abstract class Printer { public void print() { System.out.println("hello"); } } }; public class AbstractTest { public static void main(final String... airgs) { final Printer p = new Printer() { void printSomethingOther() { System.out.println("other"); } @Oviewride public void print() { super.print(); System.out.println("world"); printSomethingOther(); // works fine } }; p.print(); //p.printSomethingOther(); // does not work } } abstract class Printer { public void print() { System.out.println("hello"); } } } public class AbstractTest { public static void main(final String... airgs) { final Printer p = new Printer() { void printSomethingOther() { System.out.println("other"); } @Oviewride public void print() { super.print(); System.out.println("world"); printSomethingOther(); // works fine } }; p.print(); //p.printSomethingOther(); // does not work } } abstract class Printer { public void print() { System.out.println("hello"); } } } public class AbstractTest { public static void main(final String... airgs) { final Printer p = new Printer() { void printSomethingOther() { System.out.println("other"); } @Oviewride public void print() { super.print(); System.out.println("world"); printSomethingOther(); // works fine } }; p.print(); //p.printSomethingOther(); // does not work } } abstract class Printer { public void print() { System.out.println("hello"); } } } public class AbstractTest { public static void main(final String... airgs) { final Printer p = new Printer() { void printSomethingOther() { System.out.println("other"); } @Oviewride public void print() { super.print(); System.out.println("world"); printSomethingOther(); // works fine } }; p.print(); //p.printSomethingOther(); // does not work } } abstract class Printer { public void print() { System.out.println("hello"); } } 

    Isso também funciona com interfaces.

    Não, você nunca pode instanciair uma class abstrata. Esse é o propósito de uma class abstrata. O método getProvider você está se referindo retorna uma implementação específica da class abstrata. Este é o padrão da fábrica abstrata.

    Não, a class abstrata nunca pode ser instanciada.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.