这个抽象类有个public abstract void connect(),抽象类中的抽象方法相当于C++中的声明的作用
也就是说connect()并没有具体实现代码,那么为什么还可以调用这个方法去连接url引用的资源,
先看几行代码:
URL url=new URL(这个是参数);  //构造一个URL对象
URLConnection con=url.openConnection();  //构造URLConnection对象
con.connect(); //
(1)connect()不是抽象方法吗?方法都没有具体实现,在URLConnection中仅是一个起了一个声明的作用,调用它有什么作用?
(2)要用抽象类必须派生他的一个子类,然后才可以去实例化构造其对象。URLConnection不就是一个抽象类吗?他的子类在什么地方?子类的实例化呢?望高手解答我的疑惑

解决方案 »

  1.   

    1: connect调用的是子类的方法,因为url.openConnection返回的是URLConnection的子类对象,
    2: URLConnection有很多的子类,例如sun.net.www.protocol.http.HttpURLConnection就是其中的一个。
      

  2.   

    因为 url.openConnection() 这个方法返回的是 URLConnection 的子类的对象啊。
      

  3.   

    如果 URL 中是个 http 协议的地址,那么 openConnection 所返回是 sun.net.www.protocol.http.HttpURLConnection 对象。因为 URL 可以支持 http, ftp, file, gopher, jar, mailto 等协议,因此 openConnection 只能处理在工厂方法将支持 URL
    协议的处理对象返回。
      

  4.   

    请问:rum-lee,
    1: connect调用的是子类的方法,因为url.openConnection返回的是URLConnection的子类对象, 
    2: URLConnection有很多的子类,例如sun.net.www.protocol.http.HttpURLConnection就是其中的一个。
    父类抽象类URLConnection的抽象方法如何去调用子类的方法,我初学java,只见过:
    class A  //方法
    {
    private int data1=1;
    public void show()
    {
     System.out.println(data1);
    }
    }
    class B extends A
    {
    private int data2=2;
    public void show()
    {
     super.show();  //调用A 的方法
     System.out.println(data2);
    }
    }
    public class Test
    {
     public static void main(String []args)
    {
     //构造B的对象
     B b=new B();
    b.show();
    }
    }
    我孤陋寡闻只见过子类调用父类的方法,还没见过父类调用子类的方法,请问如何实现,最好举个例子用代码说话!我万分感激
      

  5.   

    要看其具体是由哪个类实现的,方法其实挺简单只要获得对象所属的 Class 对象就可以了。import java.io.IOException;
    import java.net.URL;
    import java.net.URLConnection;public class Test {
        
        public static void main(String[] args) throws IOException {
            URL url = new URL("http://www.csdn.net");
            URLConnection connection = url.openConnection();
            System.out.println(connection.getClass().getName());        
        }
    }
      

  6.   

    拿你上面的例子来说,就是类似下面这样的。public class Test {
        public static void main(String[] args) {
            A b = new B();
            b.show();
        }
    }
      

  7.   

    class Animal  

    public void show() 

    System.out.println("it is an animal");


    class Cat extends Animal
    { public void show() 
    {  
    System.out.println("it is a cat"); 

    } class Dog extends Animal
    { public void show() 
    {  
    System.out.println("it is a dog"); 


    public class Test 

    public static void main(String []args) 

     
    Animal a1=new Cat(); 
    Animal a2=new Dog();
    a1.show(); 
    a2.show();

    } 结果:
    it is a cat
    it is a dog动态绑定实现多态,运行时期自动会知道该去调用谁的show方法
      

  8.   

    我在百度中也发了一个贴,人家是这样解释的,看代码:
    abstract class A
    {
     abstract void a();
    }
    class B extends A
    {
     public void a()
    {
    System.out.println("a() is  in B ");
    }
    public A getA()
    {
     return this;
    }
    }
    public class Test
    {
    public static void main(String [] args)
    {
    B b=new B();
    A a=b.getA();
    a.a();
    }
    }通过子类返回父类的引用