请大家帮忙看一个问题:
不是说一个抽象类不能实例化一个对象吗?但下面这段代码好象有冲突啊。
// Display Fonts
/*
<applet code="ShowFonts" width=550 height=60>
</applet>
*/
import java.applet.*;
import java.awt.*;public class ShowFonts extends Applet {
  public void paint(Graphics g) {
    String msg = "";
    String FontList[];    GraphicsEnvironment ge = 
      GraphicsEnvironment.getLocalGraphicsEnvironment();
    FontList = ge.getAvailableFontFamilyNames();
    for(int i = 0; i < FontList.length; i++)
      msg += FontList[i] + " ";    g.drawString(msg, 4, 16);
  }
}在API里查到如下信息:
public abstract class GraphicsEnvironment extends Object
static GraphicsEnvironment getLocalGraphicsEnvironment() 
abstract  String[] getAvailableFontFamilyNames() 
这不是与下面的语句冲突吗?还是下面的语句有什么其他的意思?
GraphicsEnvironment ge = 
      GraphicsEnvironment.getLocalGraphicsEnvironment();
    FontList = ge.getAvailableFontFamilyNames();谢谢解答啊!

解决方案 »

  1.   

    可以用子类来初始化父类或者实现的接口,就像
    List list = new ArrayList();一样。
      

  2.   

    GraphicsEnvironment.getLocalGraphicsEnvironment();这里得到的是它的一个实例,是一个实现了它的子类的实例,java是容许用子类来为父类创建实例对象的。
    但是你不能用new来初始化啊,所以说“一个抽象类不能实例化一个对象”是说不能用new来实例化。
      

  3.   

    不过你new的是它的子类(非abstract的)的话,还是可以的,原因前面说了
      

  4.   

    谢谢各位!
    请问 rypgood(失魂) ( ) 信誉:100    
    GraphicsEnvironment.getLocalGraphicsEnvironment();这里得到的是它的一个实例,是一个实现了它的子类的实例,java是容许用子类来为父类创建实例对象的。那么得到的子类是属于哪个类的类型呢?
      

  5.   

    这个我就不清楚了,这个有很多情况的,比如说,它可能是它自己内部的类实现的,也可以是实现了它的子类,具体情况你不必要去关心,这就是面向对象的封装性。如果你确实要知道的话也可以,你去找到abstract类GraphicsEnvironment的static方法getLocalGraphicsEnvironment()
    ,然后看它return的是什么就知道啦