1.局部内部类访问局部变量,如果局部变量没有加final修饰,会出什么问题?
会出现编译异常,如果局部内部类要访问局部变量,该变量必须被final修饰,原因:内部类的生命周期和方法中的局部变量是不一样的,内部类是也是一个类,是存储在堆中,也只有当对该类的引用消失时,内部类才会消亡。而方法的局部变量是存储在栈中的,当调用结束时就会退栈,即在内存中这个属性就消失了。也就是说,内部类的生命周期超过了方法中局部变量的生命周期,内部类可能会调用到已经消失的属性,因此内部类不能访问方法中的局部变量。
2. 继承和多态的优点
继承:提高了代码的复用性;让类与类之间产生关系,是多态的前提
多态:提高了代码的扩展性和可维护性
3.多态的弊端
弊端:父类引用无法访问子类的特有方法
解决方法:在子父类间进行类型转换
4. 什么时候使用匿名内部类?
1、一个抽象类或者接口的抽象方法少于3个的时候
2、一个方法的形参的数据类型是一个抽象类或者是接口的时候,可考虑使用匿名内部类
5. 抽象类中不能出现的关键字是?
final可以抽象类中的变量,static,private不能出现
static 修饰方法,通过抽象类类名调用方法,没有方法体,调用没意义
private修饰了方法,不能被子类重写
6. 接口和抽象类的区别
主要从1、成员特点 2、关系特点 3、设计理念
各自下来再背一背
7. 静态方法能访问非静态方法吗?为什么?
不能访问。因为静态方法随着类的加载而加载,属于类本身,优先于对象存在,当静态方法去访问非静态方法时,静态方法访问了内存中还没存在的成员,所以不能访问
8. static修饰的变量与final修饰的变量的区别?
Static修饰的变量被该类下的所有对象所共享。
Final修饰的变量是个常量,其值不能被改变 |
|