抽象类和接口(面试题总结)

1、多态是什么,多态的前提条件是什么?
    多态:同一个对象(事物),在不同的时刻体现出来不同的状态。 
      举例: 
       猫是猫,猫是动物。 
      水(液体,固体,气态) 
     
    多态的前提: 
       A:要有继承关系 
       B:要有方法重写 
       C:要有父类引用指向子类的对象。 
            父 f = new 子(); 

2、多态中成员访问的特点分别是什么?
    成员变量
      编译看左边(父类),运行看左边(父类)
      成员方法
      编译看左边(父类),运行看右边(子类)。

    静态方法
      编译看左边(父类),运行看左边(父类)。
      (静态和类相关,算不上重写,所以,访问还是左边的)
      只有非静态的成员方法,编译看左边,运行看右边


3、什么是接口,它的特点是什么?
    interface 关键字用来声明一个接口,它可以产生一个完全抽象的类,并且不提供任何具体实现。 interface 的特性整理如下:

    1.接口中的方法可以有参数列表和返回类型,但不能有任何方法体。

    2.接口中可以包含字段,但是会被隐式的声明为 static 和 final 。

    3.接口中的字段只是被存储在该接口的静态存储区域内,而不属于该接口。

    4.接口中的方法可以被声明为 public 或不声明,但结果都会按照 public 类型处理。

    5.当实现一个接口时,需要将被定义的方法声明为 public 类型的,否则为默认访问类型, Java 编译器不允许这种情况。

    6.如果没有实现接口中所有方法,那么创建的仍然是一个接口。

    7.扩展一个接口来生成新的接口应使用关键字 extends ,实现一个接口使用 implements 。

    8.接口中的方法是抽象方法(abstract),不能是静态方法(static).接口的所有方法都是抽象的,而抽象方法是没有static,有static的方法是不能override的,所以这样定义接口才有意义。


4、抽象类和接口的区别是什么?
     第一点. 接口是抽象类的变体,接口中所有的方法都是抽象的。而抽象类是声明方法的存在而不去实现它的类。
         第二点. 接口可以多继承,抽象类不行
         第三点. 接口定义方法,不能实现,而抽象类可以实现部分方法。
         第四点. 接口中基本数据类型为static 而抽类象不是的。
         第五点.   接口中不能含有静态代码块以及静态方法,而抽象类可以含有静态方法和静态代码块。
     设计层面的讨论

    模板式设计:就高级语言来说,每个类只能继承一个类。在这个类中,你必须继承或编写出其所有子类的所有共性。抽象类的功能要远超过接口,但是,定义抽象类的代价高。

    辐射式设计:对行为的一种规范。虽然接口在功能上会弱化许多,但是它只是针对一个动作的描述。而且你可以在一个类中同时实现多个接口。在设计阶段会降低难度的。
原文地址:https://www.cnblogs.com/xujingyang/p/6440898.html