黑马程序员_java如何获取一个类(包括接口和抽象类)的对象

------- android培训、 java培训、期待与您交流! ----------


先从问题说起,

思考:怎样通过SequenceInputStream(Enumeration e)来构造。
 
 很容易会想到Enumeration会是一个集合,但通过查找发现不是,而是一个接口。
 所以不能直接new对象,当发现其有一个实现类StringTokenizer ,必然会想到,通过子类上转型,
 但点进去发现,其根本就不是一个集合的子类, 因为它的dir
  java.lang.Object
  |__java.util.StringTokenizer
 所以通过new StringTokenizer 对象也是不可取的,因为它不是集合,不能用来存储输入流对象。
 那么从它子类入手是不合适的,重新返回Enumeration。 再一看它还带着泛型。然而并没有什么卵用。
 再想,既然Enumeration是接口,不能new对象,也肯定不能通过Enumeration的方法返回一个Enumeration的对象。
 有了,那么既然Enumeration的方法不能返回 Enumeration对象,那肯定有其他类,中的方法,可以返回Enumeration对象。
 谁知道是什么类呢? 继续往下看,有个:
“ 另请参见:
 Iterator, SequenceInputStream, nextElement(), Hashtable, Hashtable.elements(), Hashtable.keys(), Vector, Vector.elements()”
 
方法先排除,Iterator, SequenceInputStream,也排除就还剩下Vector, 不多说:点!
找:方法中有没有返回值类上是 Enumeration的,
还真有,必须有嘛, Enumeration elements()  返回此向量的组件的枚举。 


 现在再回过头来看Enumeration,什么泛型啊,方法啊,都和Iterator是一样的。
 
感慨过后再想想,接口原来可以这样用:
class A{


 //通过内部类实现接口C
private class B implements InterfaceC{
      实现接口C中的方法...
}
 
 
//提供一个方法返回接口C对象,显然是个上转型对象。
public InterfaceC getC(){
return new B();
}
}

在总结一下:
如何获取一个类(包括接口和抽象类)的对象


1,所找的类不是接口或抽象类
|--有构造方法  : 直接new

|--没构造方法
|--方法都是静态的 :    直接通过类名.调用
|--有方法不是静态的: 那么肯定有方法换回本类对象,既单例设计模式。




2,所找的类是一个接口或抽象类:
|--抽象类 :  必然有直接子类,即可通过子类创建对象。例如:Reader

|--接口: (1)首先要明白这个接口是做什么的。
对于“层次结构 中的根接口”那么一般来说它具有的功能一定有你要的,
那么就可以通过它的已知实现子类来new对象。 例如:Collection

(2)如果接口的已知子类不能满足所需要求,则考虑其他类有提供了获取该接口对象的方法,
可以在另参见 中找里面的哪个类,提供了获取该接口对象的方法。 例如:Enumeration、Iterator
 
(3)没有其他类提供了获取该接口的方法,
那恭喜你,可以建一个类去实现该接口,(一般建个内部类)  例如 Comparator
  
  

你可能感兴趣的:(java,获取对象)