JAVA学习笔记3继承和多态
继承
定义
继承就是在原有的类(父类)的基础上,增加新的方法或者修改原有的方法,产生的新的类型(子类)。
我们在使用JAVA时编写的每一个类都是在继承,因为在JAVA语言中,java.lang.Object类是所有类最根本的基类(或者叫父类、超类),如果我们新定义的一个类没有明确地指定继承自哪个基类,那么JAVA就会默认为它是继承自Object类的。
类的分类
类:使用class定义且不含有抽象方法的类。
抽象类:使用abstract class定义的类,它可以含有,也可以不含有抽象方法。
接口:使用interface定义的类。
类的继承规则
类可以继承(extends)类,可以继承(extends)抽象类,可以继承(implements)接口。
抽象类可以继承(extends)类,可以继承(extends)抽象类,可以继承(implements)接口。
接口只能继承(extends)接口。
普通类继承接口后,必须实现接口的全部方法,否则只能定义成抽象类
以上三条规律同时遵守下面这些约束:
类和抽象类都只能最多继承一个类,或者最多继承一个抽象类,并且这两种情况是互斥的,也就是说它们要么继承一个类,要么继承一个抽象类。
类、抽象类和接口在继承接口时,不受数量的约束,理论上可以继承无限多个接口。当然,对于类来说,它必须实现它所继承的所有接口中定义的全部方法。
抽象类继承抽象类,或者实现接口时,可以部分、全部或者完全不实现父类抽象类的抽象(abstract)方法,或者父类接口中定义的接口。
类继承抽象类,或者实现接口时,必须全部实现父类抽象类的全部抽象(abstract)方法,或者父类接口中定义的全部接口。
多态
继承是多态得以实现的基础。从字面上理解,多态就是一种类型表现出多种状态
父类引用子类对象
- 对象类型永远不变,变的是引用类型。 对象的类型不会随着保存的引用类型而变化
- 只能对引用调用其引用类型中声明的方法。 当引用为父类类型时,只能调用父类中声明的方法,子类独有的方法无法调用
- 运行时会调用对象的实际类型中的方法。 当引用为父类类型时,调用的方法子类覆盖的话,调用的是子类覆盖的方法
多态的常见用法:
- 引用使用多态
- 方法的形参使用多态
- 方法的返回值类型使用多态
instanceof 关键字
instanceof 关键字的作用是测试它左边的对象是否是它右边的类的实例,返回 boolean 的数据类型。
1 | public static void main(String[] args) { |
以上代码运行输出结果为:
对象是 java.util.ArrayList 类的实例
