1、为什么java中单继承多实现?
父类一般会有具体的实现,菱形继承则会出现子类没有重写的方法存在两个父类实现,冲突的问题。但接口中都是抽象方法,实现时必须重写,不会存在冲突问题。
2、基本数据类型,四类八种?
整形:int short byte long;
布尔:boolean(1);
浮点型:float(4) double(8),浮点数比较不能用==或equals因为二进制保存小数 存在精度丢失的问题,涉及精密比较计算时可以用big decimal;
字符型:char(2)。
对于基本数据类型,==比较的是值,对于包装类,==比较的是对象地址,所以对象的比较用equals(),equals用于比较属性是否相等,hashcode可以辅助进行判断两个对象是否相等,如果hashcode不相等则一定不等,若hashcode相等,还需要equals为true才能确定真的相等。重写equals方法后必须重写hashcode方法,因为必须保证相等对象的hashcode相等。
3、访问控制符?
修饰方法
private该类内部访问
protected同一包下可访问
public任意包可访问
defaut同一包
修饰类
public 任意包中可访问
defaut同一包中可访问
4、成员变量与局部变量?
成员变量属于类,可被访问控制符和static修饰,可被final修饰,有默认初值,未被static修饰的对象存储在堆中属于实例变量,被static修饰的在方法区中属于类变量。接口中的成员变量必须是public static final不可被修改且必须有初始值。
局部变量属于方法,不可被修饰,可被final修饰,没有默认初值,存储在栈中
5、重写 重载?
重载是方法名必须相同其他都可以不同,重写是方法名和参数都要相同,返回参数类型小于父类,访问权限修饰符大于父类。final static private 修饰的方法 不可重写
构造方法不可以被重写,因为构造方法名必须和类名相同,而父子类名不同