HttpURLConnection

Discussion in 'Java' started by bob smith, Feb 19, 2013.

  1. bob smith

    bob smith Guest

    How can people use the class HttpURLConnection when the abstract method connect() from URLConnection is never defined?

    I thought you can't use a class till all the abstract blanks are filled in?
    bob smith, Feb 19, 2013
    #1
    1. Advertising

  2. bob smith

    Lew Guest

    On Tuesday, February 19, 2013 1:45:25 PM UTC-8, bob smith wrote:
    > How can people use the class HttpURLConnection when the abstract method connect()
    > from URLConnection is never defined?


    False.

    > I thought you can't use a class till all the abstract blanks are filled in?


    True.

    Look up polymorphism and widening conversions.

    http://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html#jls-5.1.5

    Understand the difference between declared type (compile time) and run-time type.

    Read the Java tutorials.

    Did you know that any object of a given type is also an object of every supertype of its type?

    That's how you can get

    List<Foo> foos = new ArrayList<>();

    'List', being an interface, has only abstract instance methods. Yet somehow you can call

    foos.add(new Foo());

    Same thing.

    This is basic Java stuff. Heck, it's basic O-O stuff. Google around for some introductory texts.

    --
    Lew
    Lew, Feb 19, 2013
    #2
    1. Advertising

  3. bob smith

    Eric Sosman Guest

    On 2/19/2013 4:45 PM, bob smith wrote:
    > How can people use the class HttpURLConnection when the abstract method connect() from URLConnection is never defined?
    >
    > I thought you can't use a class till all the abstract blanks are filled in?


    The openConnection() method of the URL class returns a
    URLConnection object. I haven't used it myself, but from the
    documentation it appears that for an HTTP URL the URLConnection
    will in fact be an HttpURLConnection.

    Both of those classes are abstract, and as such they cannot
    be instantiated. The object actually returned will be an instance
    of some concrete subclass, possibly anonymous. The inheritance
    tree would look something like

    java.lang.Object
    java.net.URLConnection
    java.net.HttpURLConnection
    (maybe a few more levels here)
    some.concrete.class.Thing

    If you're curious, you can do getClass() on the object you
    get back from openConnection(), and print its class name or do
    other snoopy things. But to use it, you're just fine treating
    it as an HttpURLConnection -- because it "is an" HttpURLConnection,
    in exactly the same way that an Integer "is a" Number.

    --
    Eric Sosman
    d
    Eric Sosman, Feb 19, 2013
    #3
  4. bob smith

    bob smith Guest

    On Tuesday, February 19, 2013 4:56:31 PM UTC-6, Eric Sosman wrote:
    > On 2/19/2013 4:45 PM, bob smith wrote:
    >
    > > How can people use the class HttpURLConnection when the abstract method connect() from URLConnection is never defined?

    >
    > >

    >
    > > I thought you can't use a class till all the abstract blanks are filled in?

    >
    >
    >
    > The openConnection() method of the URL class returns a
    >
    > URLConnection object. I haven't used it myself, but from the
    >
    > documentation it appears that for an HTTP URL the URLConnection
    >
    > will in fact be an HttpURLConnection.
    >
    >
    >
    > Both of those classes are abstract, and as such they cannot
    >
    > be instantiated. The object actually returned will be an instance
    >
    > of some concrete subclass, possibly anonymous. The inheritance
    >
    > tree would look something like
    >
    >
    >
    > java.lang.Object
    >
    > java.net.URLConnection
    >
    > java.net.HttpURLConnection
    >
    > (maybe a few more levels here)
    >
    > some.concrete.class.Thing
    >
    >
    >
    > If you're curious, you can do getClass() on the object you
    >
    > get back from openConnection(), and print its class name or do
    >
    > other snoopy things. But to use it, you're just fine treating
    >
    > it as an HttpURLConnection -- because it "is an" HttpURLConnection,
    >
    > in exactly the same way that an Integer "is a" Number.
    >
    >
    >
    > --
    >
    > Eric Sosman
    >
    > d


    Thanks. This clears up a lot.
    bob smith, Feb 20, 2013
    #4
  5. bob smith

    Roedy Green Guest

    On Tue, 19 Feb 2013 13:45:25 -0800 (PST), bob smith
    <> wrote, quoted or indirectly quoted someone
    who said :

    >How can people use the class HttpURLConnection when the abstract method connect() from URLConnection is never defined?
    >
    >I thought you can't use a class till all the abstract blanks are filled in?


    If you look at what URL.openConnection gives you with getClass to will
    see a variety of objects such as:
    HttpURLConnection
    HttpsURLConnectionImpl
    FileURLConnection
    JarURLConnection

    depending on which protocol you specified in the URL e.g. http:,
    https:, file:, jar:

    See http://mindprod.com/jgloss/http.html
    --
    Roedy Green Canadian Mind Products http://mindprod.com
    The generation of random numbers is too important to be left to chance.
    ~ Robert R. Coveyou (born: 1915 died: 1996-02-19 at age: 80)
    Roedy Green, Feb 21, 2013
    #5
  6. bob smith

    Arne Vajhøj Guest

    On 2/20/2013 1:26 PM, bob smith wrote:
    > On Tuesday, February 19, 2013 4:56:31 PM UTC-6, Eric Sosman wrote:
    >> On 2/19/2013 4:45 PM, bob smith wrote:
    >>> How can people use the class HttpURLConnection when the abstract method connect() from URLConnection is never defined?
    >>>
    >>> I thought you can't use a class till all the abstract blanks are filled in?

    >>
    >> The openConnection() method of the URL class returns a
    >> URLConnection object. I haven't used it myself, but from the
    >> documentation it appears that for an HTTP URL the URLConnection
    >> will in fact be an HttpURLConnection.
    >>
    >> Both of those classes are abstract, and as such they cannot
    >> be instantiated. The object actually returned will be an instance
    >> of some concrete subclass, possibly anonymous. The inheritance
    >> tree would look something like
    >>
    >> java.lang.Object
    >> java.net.URLConnection
    >> java.net.HttpURLConnection
    >> (maybe a few more levels here)
    >> some.concrete.class.Thing
    >>
    >> If you're curious, you can do getClass() on the object you
    >> get back from openConnection(), and print its class name or do
    >> other snoopy things. But to use it, you're just fine treating
    >> it as an HttpURLConnection -- because it "is an" HttpURLConnection,
    >> in exactly the same way that an Integer "is a" Number.

    >
    > Thanks. This clears up a lot.


    If you want to see everything:

    import java.io.IOException;
    import java.lang.reflect.Modifier;
    import java.net.URL;
    import java.net.URLConnection;

    public class WhatConnection {
    private static final String INDENT = " ";
    private static String getType(Class<?> clz) {
    if(clz.isInterface()) {
    return "interface";
    } else if(clz.isEnum()) {
    return "enum";
    } else {
    if((clz.getModifiers() & Modifier.ABSTRACT) != 0) {
    return "abstract class";
    } else {
    return "class";
    }
    }
    }
    public static void dumpClassInfo(String indent, Class<?> clz) {
    System.out.println(indent + getType(clz) + " " + clz.getName());
    if(clz.getSuperclass() != null) dumpClassInfo(indent + INDENT,
    clz.getSuperclass());
    for(Class<?> intf : clz.getInterfaces()) {
    dumpClassInfo(indent + INDENT, intf);
    }
    }
    public static void test(String urlstr) throws IOException {
    System.out.println(urlstr + ":");
    URL url = new URL(urlstr);
    URLConnection con = url.openConnection();
    dumpClassInfo(INDENT, con.getClass());
    }
    public static void main(String[] args) throws Exception {
    test("http://www.oracle.com/");
    test("ftp://ftp.oracle.com/");
    }
    }

    Arne
    Arne Vajhøj, Feb 22, 2013
    #6
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Flip
    Replies:
    8
    Views:
    658
  2. Siegfried Ertl

    HttpURLConnection

    Siegfried Ertl, Nov 30, 2003, in forum: Java
    Replies:
    1
    Views:
    2,236
    Sudsy
    Nov 30, 2003
  3. David G
    Replies:
    3
    Views:
    2,941
    David G
    Dec 16, 2003
  4. igoR Buttler
    Replies:
    1
    Views:
    12,073
  5. Niels Campbell

    HttpURLConnection timeout solution

    Niels Campbell, Jan 23, 2004, in forum: Java
    Replies:
    6
    Views:
    43,681
    dadada
    Oct 27, 2006
Loading...

Share This Page