A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张 涛 中级黑马   /  2012-9-6 17:27  /  1952 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张 涛 于 2012-9-12 09:46 编辑

一次面试时的一道面试题,很简单的问题,当时却答得很糟,一点都没条理。张孝祥老师在视频中说一定要答出和别人不一样的东西,你会怎么答呢?

5 个回复

倒序浏览
本帖最后由 魏-玉-彪 于 2012-9-6 18:30 编辑

    用学术的语言描述是这样:
         抽象类:抽象就是不具体,没有方法体的方法称为抽象方法,有抽象方法的类称为抽象类,抽类中可以有具体方法,也就是正常的、有方法体的、有大花括号的方法。使用abstract关键字修饰

       接口:可以认为是一种特殊的抽象类,接口中声明的所有方法都是抽象的,所有的变量都是 final类型的。使用interface关键字修饰一个接口,当抽象类中的方法都是抽象的,那么该类可以通过接口的形式来表示。


如果要换成自己的语言,可以这样回答:

    首先,抽象类是一个类,用abstract class 定义,接口是一个接口用   interface 定义,

   接口可以看成是一种特殊的类,抽象类中可以有非抽象方法,接口中声明的所有方法必须都是抽象的,所有的变量都是 final类型的 。
     
   关于继承的特性,在java中,不支持类的多继承,就好比说,一个孩子只能有一个爹,抽象类是类的一种,因此不支持多继承,但支持多重继承。  接口支持多继承,也支持多实现,就好比是一个学生可以有多个老师,可以从事多种职业。

    另外抽象类和接口都不能实例化,只能通过子类覆写了所有的抽象方法后才能实例化,就像是老父亲和老师的年龄大了,不能直接干活,只能让儿子或者学生干。{:soso__8961432591078930798_3:}
       在定义的时候,能定义接口的就定义接口,这样可以少占用一个类的extends关键字,就好比说,能让学生干的活就让学生干,儿子只有一个,干了这个就干不了别的,学生可以有很多。{:soso__10513193490961459299_4:}



回复 使用道具 举报
抽象类用abstact修饰,接口用interface修饰;
抽象类中的方法至少有一个是抽象的,而接口中的方法都是抽象的;
抽象类通过extends继承的方式来实现抽象方法,接口通过implement来实现;
抽象类只能单继承,而接口可以多继承。
回复 使用道具 举报
        相同点:
                都是不断向上抽取而来的。

        不同点:
                1. 抽象类需要被继承,而且只能是单继承。
                   接口需要被实现,而且可以多实现。
                2. 抽象类中可以定义抽象方法和非抽象方法,子类继承后,可以直接使用非抽象方法。
                   接口只能定义抽象方法,必须由子类去实现。
                3. 抽象类的继承,是 is a 的关系,在定义该体系的基本共性内容。
                   接口的实现是 like a 关系,在定义体系的额外功能。
回复 使用道具 举报
相同点:
      1.接口和抽象类都不能被实例化,用于被其他类实现和继承
      2.接口和抽象类都可以包含抽象法,实现接口或继承抽象类的普通子类都必须实现这些抽象方法
不同点
       1.接口自能包含抽象方法,不包含已经提供实现的方法;抽象类可以包含普通方法
       2.接口里不能定义静态方法;抽象类里可以定义静态方法
       3.接口里只能定义静态常量属性,不能定义普通属性;抽象类中可以定义普通属性,也可以定义静态常量属性
       4.接口不包含构造器;抽象类里可以包含构造器,抽象类里的构造器并不是用于创建对象,而是其子类调用这些构造器来完成属于抽象类的初始化操作;
        5,接口里不能包含初始化,但抽象类则完全可以包含初始化块;
       6.一个类最多只能有一个直接父类,包括抽象类;但一个类可以直接实现多个接口



       抽象类:从多个具有相同特征的类中抽象出一个抽象类,以这个抽象类作为其子类的模版,从而避免了子类设计的随意性,抽象类体现的是一种模版模式的设计,抽象类作为多个子类的通用模板,子类在抽象类的基础上进行扩展、改造,但子类总体上会大致保留抽象类的行为方式!
      接口:接口定义的是一种规范,因此接口里不能包含构造器和初始化块定义。接口里可以包含属性(还能是常量)、方法(只能是抽象方法)、内部类(包括内部接口)和枚举类定义!

评分

参与人数 1黑马币 +5 收起 理由
94007boy + 5 很给力!

查看全部评分

回复 使用道具 举报
大神啊,这些就可以了,结贴。呵呵
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马