`

<Java.JavaEE面试整理>(6) --Polymorphism之深入理解(一)

阅读更多

Q 10:请谈谈你对多态,继承,封装和动态绑定(dynamic binding)的理解?
A 10:
    多态:是指对于一个给定类型的引用可以指向不同类型的对象,并在其方法调用时会自动地选择其真正指向对象的特定方法.换个角度来说,多态是一种从上底到上的方法调用形式(in a nutshell,polymorphism is a bottom-up method call).Java里的用多态的好处是,我们可以在不修改调用代码(当然这个调用代码本身使用了具有多态特性的类和接口)的情况下,很容易地添加新的实现类.多态背后的机制就是我们说的动态绑定.

    继承:是指在一个子类中引入父类的行为方式(即methods)和状态(即variables),这样我们在子类中就可以访问.继承里最为重要的一个好处是,利用继承我们可以更高效简洁地重用代码(现在我能想到最给体现继承优势的是设计模式中的template pattern).

    Java中有两种方式来实现继承:
        1,implemention ineritance(已有逻辑的继承):
            You can extend an application’s functionality by reusing functionality in the parent class by inheriting all or some of the operations already implemented. In Java, you can only inherit from one uperclass. Implementation inheritance promotes reusability but improper use of class inheritance can cause programming nightmares by breaking encapsulation and making future changes a problem. With implementation inheritance, the subclass becomes tightly coupled with the superclass. This will make the design fragile because if you want to change the superclass, you must know all the details of the subclasses to avoid breaking them. So when using implementation inheritance, MAKE SURE THAT THE SUBCLASSES DEPEND ONLY ON THE BEHAVIOR OF THE SUPERCLASS, NOT ON THE ACTUAL IMPLEMENTATION. For example in the above diagram, the subclasses should only be concerned about the behavior known as area() but not how it is implemented.

        2,interface inheritance(接口的继承):
            (aka type inheritance): This is also known as subtyping. Interfaces provide a mechanism for specifying a relationship between otherwise unrelated classes, typically by specifying a set of common methods each implementing class must contain. Interface inheritance promotes the design concept of program to interfaces not to implementations. This also reduces the coupling or implementation dependencies between systems. In Java, you can implement any number of interfaces. This is more flexible than implementation inheritance because it won’t lock you into specific implementations which make subclasses difficult to maintain. So care should be taken not to break the implementing classes by modifying the interfaces.

    那如何选择这两种方式呢?interface inheritance优先,因为这样可以做到基于接口编程从而降低代码耦合.再有,我们也可以在composition的帮助下利用interface inheritance来重用代码.

 

(to be continued)

3
1
分享到:
评论

相关推荐

    cas 配置client 1.0 &2.0 及proxy DEMO 说明

    &lt;filter-name&gt;CAS Filter&lt;/filter-name&gt; &lt;filter-class&gt; edu.yale.its.tp.cas.client.filter.CASFilter &lt;/filter-class&gt; &lt;!-- server login url --&gt; &lt;init-param&gt; &lt;param-name&gt; edu.yale.its.tp...

    生活轨迹SSH服务端

    -- &lt;param-value&gt;/WEB-INF/applicationContext-*.xml,classpath*:applicationContext-*.xml&lt;/param-value&gt; --&gt; &lt;param-value&gt;classpath:beans.xml&lt;/param-value&gt; &lt;/context-param&gt; &lt;filter&gt; &lt;filter-name&gt;...

    一个在线报名系统

    &lt;display-name&gt;RegisterSy&lt;/display-name&gt; &lt;welcome-file-list&gt; &lt;welcome-file&gt;index.html&lt;/welcome-file&gt; &lt;welcome-file&gt;index.htm&lt;/welcome-file&gt; &lt;welcome-file&gt;index.jsp&lt;/welcome-file&gt; &lt;welcome-file&gt;...

    工资管理系统

    &lt;column name="ID" type="java.lang.Integer"/&gt; &lt;/table&gt; -&lt;table schema="SCOTT" name="BIZ_CLAIM_VOUCHER"&gt; &lt;column name="ID" type="java.lang.Integer"/&gt; &lt;/table&gt; -&lt;table schema="SCOTT" name="BIZ_...

    javaee-api-8.0-javadoc.jar

    javaee-api-8.0-javadoc.jar,这是javaee1.8api的jar包,解压后可用javadoc2chm制作成chm帮助文档。

    最简化velocity的web工程

    &lt;servlet-name&gt;velocity&lt;/servlet-name&gt; &lt;servlet-class&gt;org.apache.velocity.tools.view.VelocityViewServlet&lt;/servlet-class&gt; &lt;/servlet&gt; &lt;servlet-mapping&gt; &lt;servlet-name&gt;velocity&lt;/servlet-name&gt; ...

    spring mvc 环境搭建

    - 配置 `&lt;servlet&gt;` 和 `&lt;servlet-mapping&gt;` 标签来定义 `DispatcherServlet` 并指定其拦截的 URL 模式。 ```xml &lt;servlet&gt; &lt;servlet-name&gt;controller&lt;/servlet-name&gt; &lt;servlet-class&gt;org.springframework.web....

    JavaEE主流开源框架-Struts部分rmvb格式.zip

    JavaEE主流开源框架-Struts部分rmvb格式. JavaEE主流开源框架-Struts部分rmvb格式. JavaEE主流开源框架-Struts部分rmvb格式. JavaEE主流开源框架-Struts部分rmvb格式. JavaEE主流开源框架-Struts部分rmvb格式. ...

    160G!全新升级版 JAVAEE云计算全栈就业班课程 完美试炼JAVAEE企业级云计算应用

    ├&lt;阶段1 java语言基础&gt; │ ├&lt;1-1-Java基础语法&gt; │ ├&lt;1-2 -面向对象和封装&gt; │ └&lt;1-3-Java语言高级&gt; ├&lt;阶段2 JavaWeb·&gt; │ ├&lt;01 HTML和CSS&gt; │ ├&lt;02 JavaScript&gt; │ ├&lt;03 BootStrap&gt; │ ├&lt;04 XML&gt; │ ├...

    javaee.jar,jsf-api.jar,jsf-impl.jar,jstl-1.2.jar

    Java EE (Java Platform, Enterprise Edition) 是一个用于开发和部署企业级应用程序的框架,它包含了多个组件和服务,如Servlet、JSP(JavaServer Pages)、EJB(Enterprise JavaBeans)等。在给定的文件列表中,...

    IntelliJ IDEA maven 构建简单springmvc项目(图文教程)

    在开发Java Web应用程序时,Spring MVC是一个非常流行的框架,它提供了强大的模型-视图-控制器架构,便于构建可维护和可扩展的Web应用。...随着你对Spring MVC框架的深入理解和实践,你的项目会变得更加健壮和高效。

    IntelliJ IDEA 12创建Maven管理的JavaEE Web项目.pdf

    ### IntelliJ IDEA 12 创建 Maven 管理的 JavaEE Web 项目 #### 一、简介 本篇文章将详细介绍如何使用 IntelliJ IDEA 12 来创建一个由 Maven 管理的 JavaEE Web 项目。这不仅适用于初学者了解整个项目创建流程,...

    web xml 详解

    ### Web.xml 详解 在Java Web开发中,`web.xml` 文件扮演着极其重要的角色,它是Web应用程序的核心配置...掌握`web.xml` 文件的编写对于深入理解Java Web开发至关重要。希望本文能帮助大家更好地理解和使用`web.xml`。

    一个简单的Acegi入门实例

    &lt;!!-- web.xml文件 --&gt; &lt;?xml version="1.0" encoding="UTF-8"?...&lt;param-value&gt;/WEB-INF/acegi-config.xml&lt;/param-value&gt; &lt;/context-param&gt; &lt;!-- Acegi 的 Filter Chain 代理 --&gt; &lt;filter&gt; &lt;filter-name&gt;

    java和javaEE面试题大全打包-24个文件

    这份压缩包包含的24个文件很可能是各种面试题目的集合,旨在帮助求职者准备Java和JavaEE相关的技术面试。以下是根据这些文件可能涵盖的知识点进行的详细解析: 1. **Java基础知识**:这是所有Java面试的基础,包括...

    serverlet4Json

    &lt;servlet-name&gt;JSON&lt;/servlet-name&gt; &lt;servlet-class&gt;struts2.json.demo.JSON&lt;/servlet-class&gt; &lt;/servlet&gt; &lt;servlet-mapping&gt; &lt;servlet-name&gt;JSON&lt;/servlet-name&gt; &lt;url-pattern&gt;/&lt;/url-pattern&gt; &lt;/servlet-...

    WEB高级编程实验报告之Spring-MVC.doc

    本实验旨在通过实际操作,帮助学生深入理解并掌握Spring MVC框架的使用方法,同时结合Hibernate技术进行数据库操作,以实现一个完整的Web应用开发过程。具体来说,本实验的目标包括: 1. **理解Spring MVC模型**:...

    struts2配置2.5版

    &lt;web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"&gt; ...

Global site tag (gtag.js) - Google Analytics