Java面试宝典每日更新四

16、下面的代码有什么不妥之处?

 1. if(username.equals(“xyz”){}

 username可能为null,会报空指针错误;改为"xyz".equals(username)

 2.intx = 1;

   returnx==1?true:false;  这个改成return x==1;就可以!

17、请说出作用域public,private,protected,以及不写时的区别

不写修饰符也是一种特殊的修饰符,在java中叫做默认修饰符、default修饰符或friendly修饰符,只是说法不同。

四种修饰符的访问权限可以下表:

作用域当前类同package子孙类其他package

public√√√√

protected√√√×

friendly/default√√××

private√×××

从以上表中数据可以看出,访问权限的范围自下向上依次增大。特别强调一点,protected修饰符,在同一包内,即使两个类没有继承关系,依然可以互相访问其protected成员属性和成员方法。

18、Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?

Overload是重载的意思,Override是覆盖的意思,也就是重写。

OverloadOverride有共同之处,两个方法的方法名都必须相同,如果不同,既不构成Overload,也不构成Override

[if !supportLists]1.        [endif]Override必须发生在父子类之间,Overload可以不在父子类之间

[if !supportLists]2.        [endif]Override的特点:

[if !supportLists]a)       [endif]参数列表完全相同:个数相同、类型相同、顺序相同

[if !supportLists]b)       [endif]子类的返回值不能比父类的返回值范围大

[if !supportLists]c)        [endif]子类方法抛出的异常不能比父类方法抛出的异常范围大

[if !supportLists]d)       [endif]修饰符只能为public、protected、friendly,不能为private

[if !supportLists]e)        [endif]父子类方法不能使用static修饰

[if !supportLists]3.        [endif]重载发生在同一个类或父子类之间,重载中参数列表至少满足个数不同、类型不同、顺序不同中的一个条件,不包含父子类之间的static方法

19、构造器Constructor是否可被override?

构造器不能被重写Override,但可以被重载Overload。如果类没有显示定义构造器,此类也会有一个系统默认的无参构造器,只是方法体是空的。

20、接口是否可继承接口?抽象类是否可实现(implements)接口?抽象类是否可继承具体类(concrete class)?抽象类中是否可以有静态的main方法?抽象类是否可有以内部类?接口是否可以有内部类?

接口可以继承接口;抽象类可以实现(implements)接口;抽象类可以继承具体类;抽象类中可以有静态的main方法;抽象类可有以内部类;接口可以有内部类,但必须是static内部类,但不一定是final的。

抽象类与普通类的区别有以下两点:

1. 不能创建实例对象

2. 允许有abstract方法

抽象类再补充几点:

1. 抽象类可以没有抽象方法

2. 抽象类可以只有私有构造器

3. 抽象类的修饰符不能使用final

接口补充几点:

1. 可以没有任何抽象方法

2. 接口可以有属性,但必须是public static final类型的

3. 接口中可以定义内部类,但内部类必须是public static类型的(可以是抽象类,不要求是final类型的)

4. 接口类定义不能使用final修饰符

5. 接口类都是abstract的,即使定义类时,没有显示声明

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

推荐阅读更多精彩内容