面试题--final、接口和抽象类的区别和联系

final

1.final 修饰变量、成员变量值不能再变化,final修饰引用类型变量,栈内存中的引用不能改变,但所指向的堆内存中的对象属性值,仍在变化;

2.final修饰方法,不能被子类重写

3.final修饰类,不能有子类

4.final不能修饰构造方法

5.java中提供了一些final常量,方法:Math、System、String、StringBuffer

Arrays:不是final类,方法一般也不是final的

6.final 只能赋值一次,创建子类对象的时候使用,只能实例化一次;

abstract

抽象类

1.不能实例化

2抽象类必须有构造方法,创建子类对象的时候使用

3.一个抽象类至少有0个抽象方法

抽象方法

1.抽象方法只有声明,没有方法体;

2.父类的方法是抽象的,需要子类实现;父类的方法不是抽象的,子类可以重写子类必须重写父类的抽象方法不重写就编译错误或许子类也必须定义为抽象类;

3.多态的向上转型,抽象类的实例化都是通过子类的实例化实现

抽象类

1.抽象类首先是类,一般作为父类使用,体现的是is-a的关系

2.抽象类不能被实例化

3.抽象方法必须被子类实现

4.是一种模板模式,抽象类为所有子类提供一个通用模板,子类可以在该模板基础上扩展

adstract 和final

1.使用abstract修饰的类是抽象类,需要被继承,使用abstract修饰的方法是抽象方法,需要被子类重写;

2.final不能被继承,方法不能被重写,变量不能被修改,final修饰的基本变量的值不能改变,由变量变为常量;但final修饰的引用类型变量,栈内存中的引用不能修改,但所指向的堆内存中的对象属性值仍在改变;

interface

接口的组成:

1.接口和数组、类等同一层次

2.成员变量:接口中所有的变量都使用public static final 修饰,都是静态常量

3.成员方法:接口中所有的方法都使用public abstract 修饰,都是全局抽象方法

4.构造方法:接口不能new,也没有构造方法

接口与抽象类的联系与区别

联系:

1.都不能被实例化;

2.都位于继承树的顶端,用于被其他类实现和继承;

3.都可以包含抽象方法,实现接口或继承抽象类的普通子类都必须实现这些抽象方法;

区别

1.接口中只包含抽象方法、静态方法和默认方法,不能为普通方法提供方法实现;抽象类中完全包含普通方法;

2.接口只能定义静态常量,不能定义普通成员变量;抽象类既可以定义普通成员变量,也可以定义静态常量;

3.接口不能包含构造器;抽象类可以包含构造器(让抽象类的子类调用这些构造器来完成属于抽象类的初始化操作)

4.接口不能包含初始化块;抽象类可以包含初始化代码块;

5.接口可以多实现;抽象类单继承,包括抽象类;

你可能感兴趣的:(java)