多态概述:
同一个对象,在不同时刻变现出来的不同形态
举例:猫
我们可以说猫是猫:猫 cat = new 猫();
我们也可以说猫是动物:动物 animal = new 猫();
这里猫在不同的时刻表现出来了不同的形态,这就是多态
多态的前提和体现:
有继承/实现关系
有方法重写
有父类引用指向子类对象
多态中成员访问特点:
成员变量:编译看左边,执行看右边
成员方法:编译看左边,执行看右边
为什么成员变量和成员方法的访问不一样呢?
因为成员方法有重写,而成员变量没有
多态的好处和弊端:
多态的好处:提高了程序的拓展性
具体体现:定义方法的时候,使用父类型作为参数,将来在使用的时候,使用具体的子类型参与操作
多态的弊端:不能使用子类的特有功能
多态的转型:
向上转型:
从子到父
父类引用指向子类对象
向下转型:
从父到子
父类引用转为子类对象
抽象方法必须在抽象类里面
abstract: 修饰类和方法
抽象类:不能直接使用
抽象方法:不能有方法体/必须在抽象类里面或者接口里
抽象类的特点:
作用:
定义规则和规范,强制所有的子类去按照规则做事情
抽象类的成员特点:
成员变量
可以是变量
也可以是常量
构造方法:
有构造方法,但是不能实例化
那么,构造方法的作用是什么呢?用于子类访问父类数据的初始化
成员方法:
可以有抽象方法:限定子类必须完成某些操作
也可以有非抽象方法:提高代码复用性
接口概述:
接口就是一种公共的规范标准,只要符合标准,大家都可以通用
Java中的接口更多的体现在对行为的抽象
接口特点:
接口用关键字interface修饰
public interface 接口名{}
类实现接口用imples表示
public class 类名 implements 接口名{}
接口不能实例化
接口如何实现实例化?参考多态的方式,通过实现类对象实例化,这叫做接口多态
多态的形式:具体类多态,抽象类多态,接口多态
多态的前提:有继承或者实现关系;有方法重写;有父(类/接口)引用指向(子/实现)类对象
接口的实现类
要么是重写接口中的所有抽象方法
要么是抽象类
接口的成员特点:
成员变量:
只能是常量
默认修饰符:public static final
构造方法:
接口没有构造方法,因为接口主要是对行为进行抽象的,是没有具体存在
一个类中如果没有父类,默认继承自Object类
成员方法:
只能是抽象方法
默认修饰符:public abstract
类和接口的关系:
类和类的关系:
继承关系,只能单继承,但是可以多层继承
类和接口的关系:
实现关系,可以单实现,也可以多实现,还可以在继承一个类的同时实现多个接口
接口和接口的关系:
继承关系,可以单继承,也可以多继承
抽象类和接口的区别:
成员区别:
抽象类 变量,常量;有构造方法;有抽象方法,也有非抽象方法
接口 常量;抽象方法
关系区别:
类与类 继承,单继承
类与接口 实现,可以单实现,可以多实现
接口与接口 继承,单继承,多继承
设计理念区别:
抽象类 对类抽象,包括属性、行为
接口 对行为抽象,主要是行为
抽象类是事物的抽象,接口是对行为的抽象