面试题
- 继承
- 继承的特点
- super关键字
- 继承中变量访问特点
- 继承中构造访问特点
- 为什么子类中所有构造方法默认都会访问父类无参构造方法。
- 如果父类中没有无参构造
- 继承中成员方法访问特点
- 重写
- 概述
- 应用
- 注意事项
- 方法重写和重载有什么区别?
- 静态代码块、构造代码块,构造方法的执行顺序
- 多态
- 概念
- 多态的前提
- 程序中的体现
- 好处和作用
- 抽象(abstract)
- 抽象类
- 抽象类特点
- 抽象类的成员特点
- 抽象类注意事项
- 抽象类不能被实例化,为什么还有构造函数?
- 抽象关键字abstract不可以和哪些关键字共存?
- 接口(interface)
- 特点
- 接口的成员特点
- 抽象类和接口的区别
- 成员变量
- 成员方法
- 构造方法
继承
继承的特点
Java只支持单继承,不支持多继承。
super关键字
super是一个关键字,代表父类的存储空间标识。(可以理解为父亲的引用)
super和this的用法相似。
this代表对象的引用(谁调用就代表谁);
super代表当前子类对父类的引用。
继承中变量访问特点
在子类方法中访问一个变量
子类局部范围查找
子类成员范围查找
父类成员范围查找
如果都没有就报错(不考虑父亲的父亲)
继承中构造访问特点
子类中所有构造方法默认都会访问父类无参构造方法。
为什么子类中所有构造方法默认都会访问父类无参构造方法。
因为子类会继承父类中的数据,可能还会使用父类中的数据,因此,子类初始化前,会先初始化父类。
如果父类中没有无参构造
可以通过super关键字显式调用父类有参构造,或父类添加无参构造
继承中成员方法访问特点
子类成员范围查找
父类成员范围查找
如果都没有就报错(不考虑父亲的父亲)
重写
概述
子类中出现与父类一模一样的方法时(除了权限修饰符,权限修饰符大于等于不包括private,返回值类型,方法名和参数列表相同),会出现覆盖操作,称为重写
应用
当子类需要父类的功能,而功能主体子类有自己特有内容时,可以复写父类中的方法,这样,既沿袭了父类的功能,又定义了子类特有的内容。
注意事项
私有方法不能被重写(父类私有成员子类不能继承)
子类方法权限修饰符大于等于父类(public>默认>私有)
方法重写和重载有什么区别?
方法的重写用在子类方法与父类方法一模一样时,除权限修饰符,返回值类型,方法名和参数列表都是相同的。
重载用在同一个类中各方法方法名相同,参数列表不同(与返回值类型没有关系)的情况。
静态代码块、构造代码块,构造方法的执行顺序
父类静态代码块→子类静态代码块→父类构造代码块→父类构造方法→子类构造代码块→子类构造方法
多态
概念
对象在不同时刻表现出来的不同状态。
多态的前提
要有继承或者实现关系。
要有方法的重写。
要有父类引用指向子类对象。
程序中的体现
父类或者接口的引用指向或者接收自己的子类对象。
好处和作用
多态的存在提高了程序的扩展性和后期可维护性。
抽象(abstract)
抽象就是从多个事物中将共性的,本质的内容抽象出来。
抽象类
Java中可以定义没有方法体的方法,该方法的具体实现由子类完成,该方法称为抽象方法,包含抽象方法的类就是抽象类。
抽象类特点
抽象方法一定在抽象类中;
抽象方法和抽象类都必须被abstract关键字修饰;
抽象类不可以用new创建对象,因为调用抽象方法没意义;
抽象类中的抽象方法要被使用,必须由子类复写其所有的抽象方法后,建立子类对象调用; 如果子类只覆盖了部分的抽象方法,那么该子类还是一个抽象类;
抽象类中可以有抽象方法,也可以有非抽象方法,抽象方法用于子类实例化;
如果一个类是抽象类,那么,继承它的子类,要么是抽象类,要么重写所有抽象方法。
特殊:抽象类中可以不定义抽象方法,这样做仅仅是不让该类建立对象。
抽象类的成员特点
成员变量:可以是变量,也可以是常量;
构造方法:有构造方法;
成员方法:可以是抽象方法,也可以是非抽象方法。
抽象类注意事项
抽象类不能被实例化,为什么还有构造函数?
只要是class定义的类里面就肯定有构造函数。抽象类中的函数是给子类实例化的。
抽象关键字abstract不可以和哪些关键字共存?
final:如果方法被抽象,就需要被覆盖,而final是不可以被覆盖,所以冲突。
private:如果函数被私有了,子类无法直接访问,怎么覆盖呢?
static:不需要对象,类名就可以调用抽象方法。而调用抽象方法没有意义。
接口(interface)
接口是抽象方法和常量值的集合。从本质上讲,接口是一种特殊的抽象类,这种抽象类只包含常量和方法的定义,而没有变量和方法的实现。
特点
接口不能被实例化。
一个类如果实现了接口,要么是抽象类,要么实现接口中的所有方法。
接口的成员特点
接口中的成员修饰符是固定的!
成员常量:public static final,接口里定义的变量是全局常量,而且修饰符只能是这三个关键字,都可以省略,常量名要大写。
成员方法:public abstract,接口里定义的方法都是抽象的,两个修饰符关键字可省略。
抽象类和接口的区别
抽象类是自下而上,抽取出共同点。
接口是一种规范, 它是自上而下的一种要求,要求实现类必须做到这种规范。
成员变量
抽象类能有变量也可以有常量
接口只能有常量
成员方法
抽象类可以有非抽象的方法,也可以有抽象的方法
接口只能有抽象的方法
构造方法
抽象类有构造方法
接口没有构造方法
来源:https://www.runoob.com/w3cnote/java-extends.html