Java面试宝典每日更新五

21、写clone()方法时,通常都有一行代码(不是必须有),是什么?

答案:super.clone()

super.clone()是浅度克隆,只是把原对象的对象属性的引用复制一份,基本数据类型的属性是完全复制的。

要想深度clone,就需要把对象中的引用类型的属性递归复制。

22、面向对象的特征有哪些方面

1. 封装,隐藏内部实现,只暴露公共行为

2. 继承,提高代码的重用性

3. 多态,体现现实生活中相似对象的差异性

4. 抽象,抽取现实世界中相似对象的共同点

23、java中实现多态的机制是什么?

Java中通过继承父类或实现接口,实现多态的机机制。

继承指子类继承父类的所有属性、方法、内部类。对于属性而言,如果子类的属性名和父类的属性名相同,则子类会把父类的属性隐藏。属性根据引用来调用,方法根据对象来调用;Java中只有单继承,一个子类只能直接继承一个父类。

实现指某类可以实现接口中的部分或所有方法,并能继承接口中的所有的属性和内部类。接口中的属性都为public static final类型,方法都为public类型,内部类都为public static类型。接口可以继承多个接口,实现类可以实现多个接口。

24、abstract class和interface有什么区别?

使用abstract修饰符的class为抽象类,abstract类不能创建的实例对象。

接口(interface)是一种特殊的类,使用interface关键字进行修饰。

下面比较一下两者的语法区别:

1. 抽象类可以有构造方法,接口中不能有构造方法;

2. 抽象类中可以有普通成员属性,接口中没有普通成员属性;

3. 抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法;

4. 抽象类中的抽象方法的访问类型可以是publicprotected和默认类型,但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型;

5. 抽象类中可以包含静态方法,接口中不能包含静态方法;

6. 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型;

7. 一个类可以实现多个接口,但只能继承一个抽象类;

8. 在应用上也有区别,接口更多的是在系统架构设计方法发挥作用,主要用于定义模块之间的通信契约;而抽象类在代码实现方面发挥作用,可以实现代码的重用。

补充:

答此问题,最好由概念出发,逐步加深,还可以提及一些抽象类和接口,让面试官了解你确实很清楚两者的区别。

25、abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized,是否可同时是final?

1. abstract的method不可以同时是static的,因为abstract方法是抽象的方法,不能有方法体,是要被子类实现的,而static方法必须有方法体,两者不能在方法上共用。

2. abstract的method不可以同时是native的,native方法表示该方法要用另外一种依赖平台的编程语言实现的,其实是有实现的,只是不是Java代码实现的,所以,它也不能是抽象的,不能与abstract混用。另外native方法可以被子类重写,例如hashCode方法。

3. abstract的method不可以同时是synchronized的,abstract方法只能存在于抽象类或接口中,它不能直接产生对象,而默认synchronized方法对当前对象加锁,而abstract方法只能被子类继承,synchronized不能被继承,抽象方法使用synchronized,没有意思,因此Java不允许抽象方法使用synchronized修饰;synchronized 可以修饰构造器,但一个对象的构造器不可能同时被多个线程调用,这个也是多余的,但是Java不报错,应该是一个BUG。

4. abstract的method不可以同时是final的,因为抽象方法目的是让子类实现,而final方法是不让子类重写,再者从根本上是冲突的,不可以共用。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容