Java>>面试题
46、不通过构造函数也能创建对象吗?
答:Java创建对象的几种方式(重要):
- 用new语句创建对象,这是最常见的创建对象的方法。
- 运用反射手段,调用java.lang.Class或者java.lang.reflect.Constructor类的newInstance()实例方法。
- 调用对象的clone()方法。
- 运用反序列化手段,调用java.io.ObjectInputStream对象的 readObject()方法。
(1)和(2)都会明确的显式的调用构造函数 ;
(3)是在内存上对已有对象的影印,所以不会调用构造函数 ;
(4)是从文件中还原类的对象,也不会调用构造函数。
47、匿名内部类可不可以继承或实现接口。为什么?
答:匿名内部类是没有名字的内部类,不能继承其它类,但一个内部类可以作为一个接口,由另一个内部类实现.
- 由于匿名内部类没有名字,所以它没有构造函数。因为没有构造函数,所以它必须完全借用父类的构造函数来实例化,换言之:匿名内部类完全把创建对象的任务交给了父类去完成。
- 在匿名内部类里创建新的方法没有太大意义,但它可以通过覆盖父类的方法达到神奇效果,如上例所示。这是多态性的体现。
- 因为匿名内部类没有名字,所以无法进行向下的强制类型转换,持有对一个匿名内部类对象引用的变量类型一定是它的直接或间接父类类型。
48、在Java中,为什么基本类型不能做为HashMap的键值,而只能是引用类型,把引用类型做为HashMap的健值,需要注意哪些地方。
在Java中是使用泛型来约束HashMap中的key和value的类型的,即HashMap< K, V>;而泛型在Java的规定中必须是对象Object类型的,也就是说HashMap< K, V>可以理解为HashMap< Object, Object>,很显然基本数据类型不是Object类型的,因此不能作为键值,只能是引用类型。虽然我们在HashMap中可以这样添加数据:“map.put(1, “Java”);”,但实际上是将其中的key值1进行了自动装箱操作,变为了Integer类型。
49、简述Java中如何实现多态
实现多态有三个前提条件:
- 继承的存在;(继承是多态的基础,没有继承就没有多态)。
- 子类重写父类的方法。(多态下会调用子类重写后的方法)。
- 父类引用变量指向子类对象。(涉及子类到父类的类型转换)。
最后使用父类的引用变量调用子类重写的方法即可实现多态。
50、以下对继承的描述锚误的是 ()
A、Java中的继承允许一个子类继承多个父类
B、父类更具有通用性,子类更具体
C、Java中的继承存在着传递性
D、当实例化子类时会递归调用父类中的构造方法
答案:A
分析:Java是单继承的,一个类只能继承一个父类。