如何在不扩展java中的抽象类的情况下访问抽象类方法

如何在不扩展java中的抽象类的情况下访问抽象类方法,java,abstract-class,Java,Abstract Class,我是java新手,当我在internet上搜索通过java获取HTTP响应代码时,我开始了解java中的[HttpURLConnection]类。这个类是抽象类,因此我不能实例化这个类。所以我的问题是我有一个URL对象,以及如何在代码中使用这个抽象类。这可能是一个非常基本的问题,但您的回答将有助于从根本上理解java 提前谢谢 您可以从一个URL实例中获得一个HttpURLConnection对象,该实例表示一个http:(或https:)协议URL,该URL来自它的。返回的是对符合抽象类定义的

我是java新手,当我在internet上搜索通过java获取HTTP响应代码时,我开始了解java中的
[HttpURLConnection]
类。这个类是抽象类,因此我不能实例化这个类。所以我的问题是我有一个
URL
对象,以及如何在代码中使用这个抽象类。这可能是一个非常基本的问题,但您的回答将有助于从根本上理解java

提前谢谢


您可以从一个
URL
实例中获得一个
HttpURLConnection
对象,该实例表示一个
http:
(或
https:
)协议URL,该URL来自它的。返回的是对符合抽象类定义的接口的对象的引用(但它将是
HttpURLConnection
子类的实例)

您通常不需要了解您正在使用的具体类;你可以用你所拥有的来定义你应该能够做的事情。这些事情然后由您所引用的对象的具体类来完成

请特别注意:

有没有办法在不使用扩展抽象类的类的情况下使用抽象类的方法

如果它们是实例方法,则不会。线索在名称中。;-)若要使用实例方法,必须具有实例。要拥有实例,您必须拥有该实例所属的具体(非抽象)类


但是再次强调:通常你并不关心这个类是什么,只是你有一个符合你需要使用的接口的实例。

你不能实例化一个抽象类,你需要一个子类来实现特定的方法

您可以使用匿名类访问其方法,例如:

new HttpURLConnection() { /* here you need to implement many empty methods */ }.getOutputStream();
但对于您的问题,我认为您需要一个真正的HttpURLConnection,它可以被URL对象获取

HttpURLConnection connection = urlObject.openConnection();
connection.setDoInput(true);
connection.setDoOutput(false);
// input = true & output = false means a GET
// input = true & output = true means a POST
connection.connect();
InputStream content = connection.getInputStream();

您必须使用一个具体的类,它是抽象类的子类来调用该方法

或者,如果要使用的函数是静态的,则可以直接调用它。下面是一个很小的例子来说明这一点

abstract class SimpleAbstract {
public static String testString() {
    return "You got me";
}

public abstract void doMagic();}
public class AbstractExample {
public static void main(String[] args) {
    System.out.println(SimpleAbstract.testString());        
}}

下面是一个初始化抽象类而不扩展它的示例

    abstract class Abstractclass{
       public void someMethod(){
          System.out.println("Hello");
       }
       abstract public void anotherMethod();
    } 
    public class Demo {
       public static void main(String args[])
       { 
         //creation of object .........................

          Abstractclass obj = new Abstractclass(){
              public void anotherMethod(){
                 System.out.println("Hello12222");
                              }
                };    
         obj.anotherMethod();
         obj.someMethod();
       }
    }

输出:
Hello12222 Hello

获取一个具体子类的实例。我已经更新了Java8链接@SLaks-我的问题是“有没有办法使用抽象类的方法而不使用扩展抽象类的类”输出:Hello12222 HelloIn在上面的代码中,您从抽象类Abstractclass实例化了一个对象。如果你能解释清楚的话,这会很有帮助。在这里,我只是用抽象类对象的初始化来定义抽象函数。当我们在子类中扩展它,然后定义抽象函数时,这就是它所需要的。。。