谈谈对java多态的理解?
多态是指父类的某个方法被子类重写时,可以产生自己的功能行为,同一个操作作用于不同对象,可以有不同的解释,产生不同的执行结果。
多态的三个必要条件:
- 继承父类
- 重写父类的方法
- 父类的引用指向子类对象
什么是多态
面向对象的三大特性:封装、继承、多态。从一定角度来看,封装和继承几乎都是为多态而准备的。这是我们最后一个概念,也是最重要的知识点。
多态的定义:指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用)
实现多态的技术称为:动态绑定(dynamic binding),是指在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。
多态的作用:消除类型之间的耦合关系。
现实中,关于多态的例子不胜枚举。比方说按下 F1 键这个动作,如果当前在 Flash 界面下弹出的就是 AS 3 的帮助文档;如果当前在 Word 下弹出的就是 Word 帮助;在 Windows 下弹出的就是 Windows 帮助和支持。同一个事件发生在不同的对象上会产生不同的结果。
通过静态内部类实现单例模式有哪些优点?
- 不用 synchronized ,节省时间。
- 调用 getInstance() 的时候才会创建对象,不调用不创建,节省空间,这有点像传说中的懒汉式。
静态代理和动态代理的区别,什么场景使用?
静态代理与动态代理的区别在于代理类生成的时间不同,即根据程序运行前代理类是否已经存在,可以将代理分为静态代理和动态代理。如果需要对多个类进行代理,并且代理的功能都是一样的,用静态代理重复编写代理类就非常的麻烦,可以用动态代理动态的生成代理类。
静态代理使用场景:四大组件同AIDL与AMS进行跨进程通信
动态代理使用场景:Retrofit使用了动态代理极大地提升了扩展性和可维护性。
代码的坏味道:
1、代码重复:
代码重复几乎是最常见的异味了。他也是Refactoring 的主要目标之一。代码重复往往来自于copy-and-paste 的编程风格。
2、方法过长:
一个方法应当具有自我独立的意图,不要把几个意图放在一起。
3、类提供的功能太多:
把太多的责任交给了一个类,一个类应该仅提供一个单一的功能。
4、数据泥团:
某些数据通常像孩子一样成群玩耍:一起出现在很多类的成员变量中,一起出现在许多方法的参数中…..,这些数据或许应该自己独立形成对象。 比如以单例的形式对外提供自己的实例。
5、冗赘类:
一个干活不多的类。类的维护需要额外的开销,如果一个类承担了太少的责任,应当消除它。
6、需要太多注释:
经常觉得要写很多注释表示你的代码难以理解。如果这种感觉太多,表示你需要Refactoring。
网友评论