java抽象类怎么实例化了

来源:互联网 发布:导演构思 知乎 编辑:程序博客网 时间:2024/04/29 02:50

Q:程序中A句实例化了抽象类OutputStream 怎么回事?抽象类不是不能实例化的么?

import java.net.*;
import java.io.*;
public class TCPClient {
public static void main(String[] args) throws Exception {
  Socket s = new Socket("222.91.106.117", 6666);
  OutputStream os = s.getOutputStream();  // A
  DataOutputStream dos = new DataOutputStream(os);
  dos.writeUTF("LJ be bravery!");
  dos.flush();
  dos.close();
  s.close();
}
}

 

A:A句并没有实例化了抽象类OutputStream
OutputStream os 只是声名一个类型为OutputStream 变量
s.getOutputStream(); 是获取一个抽象类OutputStream 的实例对象
基础最重要  好好看一下基础

 

Q:String urlStr = "http://dict.baidu.com/";
      URL url = new URL(urlStr);
 
      URLConnection con = url.openConnection();
      int contentLength = con.getContentLength();

      URLConnection在API中定义为public abstract class URLConnectionextends Object

 

A:URLConnection为抽象类表示本身不能被实例化,即:URLConnection uc= new URLConnection();这就是一种错误的写法,但是URLConnection有两个子类:HttpURLConnection和JarURLConnection , url.openConnection()方法返回肯定就是这两个子类中的一个,这是java多态性的一种体现,想必楼主应该可以相通了吧!

 

Q:抽象类 URLConnection 是所有类的超类,它代表应用程序和 URL 之间的通信链接。此类的实例可用于读取和写入此 URL 引用的资源。这是API上写的  为什么说此类的实例?

 

A:java的多态性就是体现在用一个父类声明,可以实例化其子类对象!我举个例子:譬如:
abstract class Person{....}   class Student extends Person{...},表明这个Student类继承了抽象类Person,我们在程序中可以这么声明:Person p = new Student();这里就是用父类声明,实例化其子类对象,这个Student对象也能说成是抽象类Person的实例。不知道这么说你可理解了!