Java多态
多态就是同一个对象下在不同时刻表现出来的不同的形态,多态的前提要有继承或实现的关系,要有方法的重写,要有父类引用指向子类对象,它的好处就是提高了代码的扩展性,如定义方法时候,使用父类型作为参数,在使用的时候,使用具体的子类型参与操作。弊端就是不能使用子类特有的成员。
多态中的成员访问特点:
成员变量:编译看父类,运行看父类
成员方法:编译看父类,运行看子类
多态中的转型:分为向上转型和向下转型。向上转型就是父类引用指向子类对象。向下转型的格式:
子类名 对象名 = (子类型)父类引用;
抽象类
抽象类就是我们在做子类共同性抽取的时候,有些方法我们在父类中无法具体的实现,这个时候我们就要用抽象类。
抽象类和抽象方法的格式是使用关键字abstract来实现的,具体格式:
//抽象类的定义
public abstract class 类名 {}
//抽象方法的定义,抽象方法中不能写方法体
public abstract void 方法名();
注意: 抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类并且抽象类不能实例化,抽象类如何实例,参照多态的方式,通过子类对象实例化,这叫抽象类多态。
抽象类的子类,要么重写抽象类中的所有抽象方法,要么是抽象类
抽象类成员的特点:成员变量可以是变量也可以是常量。有构造方法,空参和有参。有成员方法,抽象方法和普通方法。
接口
什么是接口,接口就是一种公共的规范标准,Java中的接口更多的是体现在对行为的抽象。
定义接口的格式:
//interface是定义接口的关键字
public interface 接口名 {}
实现接口的格式:
//implements是实现接口的关键字
public class 类名 implements 接口名 {}
接口如何实例化呢?参照多态的方式,通过实现类对象实例化,这叫接口多态,多态的形式:具体类多态,抽象类多态,接口多态。
接口的子类要么重写接口中的所有抽象方法,要么子类也是抽象类。
接口成员特点:
成员变量
只能是常量,默认修饰符public static final,接口没有构造方法,因为接口主要是扩展功能的,没有具体的存在。成员方法,只能是抽象方法,默认修饰符public abstract。
类和接口的关系:
类与类的关系
继承关系,只能单继承,但是可以多层继承。
类与接口的关系
实现关系,可以单实现,也可以多实现,还可以在继承一个类的同时实现多个接口。
接口与接口的关系
继承关系,可以单继承,也可以多继承。
抽象类和接口的区别:
成员区别
抽象类
变量,常量;有构造方法;有抽象方法,也有非抽象方法。
接口
常量;抽象方法。
关系区别
类与类
继承,单继承。
类与接口
实现,可以单实现,也可以多实现。
接口与接口
继承,单继承,多继承。
设计理念区别
抽象类
对类抽象,包括属性、行为。
接口
对行为抽象,主要是行为。