多态,java代码多种形态,多种体表
向上转型
- 语法:
父类() 对象名 = new 子类名(参数列表)
使用父类类型的变量接收子类类型的对象
多态使用的方法和属性都是子类和父类共有的内容,
对象能够调用的属性和方法全部来源于子类中的内容。
子类独有的方法和属性是不能使用的
- 里式转换原则:父类能够出现的地方,子类同样也可以出现
- 如果类型是Object类型,所有的引用数据类型都可以作为参数传入,所有基本数据类型也可以传入。Object是万能的
因为基本数据类型不是类,那么和Object也就没有直接的父子关系,是因为包装类。
向下转型
- 语法
子类名 对象名 = (子类名)向上转型的对象名
如果向上转型后,需要调用子类独有的方法和属性时,就需要向下转型,必须是先有向上转型,才会有向下转型。
一般用instanceof返回boolean类型来判断需要向下转型的对象是否属于某个子类后,再调用该子类的方法,防止异常出现。
抽象类,抽象方法
用关键字abstract
修饰的类和方法
- 抽象类
- a.构造方法不能创建对象,因为是抽象的。jvm认为该类可能出现抽象方法
- b.抽象类可以存在抽象方法,也可以不存在,抽象方法必须存在于抽象类中(接口)
- 抽象方法(抽象方法是没有方法体,不能做到具体的功能)
- 语法结构
修饰符 abstract 返回值类型 方法名称(参数列表);
- 出现的位置:
抽象方法只能定义在抽象类中和接口中。
- 语法结构
如果子类继承了一个抽象类,必须重写抽象父类中的抽象方法(或者将子类也定义为抽象方法)
抽象方法和普通方法区别: 抽象方法没有方法体,普通方法有。
接口
接口,接口是属于类级别(接口是一种特殊的类)
接口是一种规范,规则。
面向接口编程
interface关键字是接口的标志
- 1.在接口中属性必须是常量(访问修饰符不能为private,名称习惯上全大写,必须进行初始化)
- 2.接口中的方法必须是抽象方法,习惯上省略关键字abstract
- 3.接口不能创建对象,因为接口中的方法全部为抽象方法。
- 4.接口打破了java中单继承的缺陷,接口可以实现多继承
读法:实现类实现了接口中的抽象方法
关系
- 类与类: 子类(class)只能继承(extends)一个父类(class),
构造方法必须调用 - 类与接口: 实现类(class)可以实现(implements)多个接口(interface),所有的接口必须实现。
- 接口与接口: 接口(interface)可以继承(extends)对个接口(interface),子接口要继承所有父接口的属性和抽象方法。