Java 面向对象的基本特性?
- 抽象:将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面。
- 继承:从已有类得到继承信息创建新类的过程。提供继承信息的类被称为父类(超类、基类);得到信息的类被称为子类(派生类)。
- 封装:把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的接口。
- 多态:允许不同子类的对象对同一消息做出不同的响应。
抽象类与接口的区别?
- 抽象类需被子类继承;接口需被类实现
- 抽象类中可以有普通变量;而接口中只能有静态常量
- 抽象类中方法访问权限不限;接口中的方法都为 public;
- 抽象类中可以只方法声明,也可以做方法实现;接口中只能有方法声明(JDK8 中可以有静态方法和默认方法)
- 抽象类只能单基础;接口可以多继承接口,也可以被实现多个接口
为什么内部类访问的局部变量必须被 final 修饰?
因为生命周期不同。局部变量在方法结束后就会被销毁,但内部类对象并不一定,这样就会导致内部类引用了一个不存在的变量。
所以编译器会在内部类中生成一个局部变量的拷贝,这个拷贝的生命周期和内部类对象相同,就不会出现上述问题。
但这样就导致了其中一个变量被修改,两个变量值可能不同的问题。为了解决这个问题,编译器就要求局部变量需要被 final 修饰,以保证两个变量值相同。
Read full article from 面试常见问题 – xuan's blog
No comments:
Post a Comment