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是覆盖的意思,也就是重写。
Overload和Override有共同之处,两个方法的方法名都必须相同,如果不同,既不构成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的,即使定义类时,没有显示声明