多态的基础语法:
1、学习基础语法之前,需要普及两个概念:
向上转型
子---->父
向下转型
父---->子
java中允许向上转型,也允许向下转型。
无论是向上转型还是向下转型,两种类型之间必须是继承关系,没有继承关系,编译器会报错
多态指的是:
父类型引用指向子类型对象
包括编译阶段和运行阶段
编译阶段:绑定父类的方法
运行阶段:动态绑定子类型对象的方法 ·
多种形态
父类类型 变量名=new 子类对象;
变量名.方法名();
父类类型:指子类对象继承的父类类型,或者实现的父类的接口类型
当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,执行的是子类重写后的方法
引用类型转换
向上转型:多态本身是子类类型向父类类型想上转换的过程,这个过程是默认的。当父类引用指向一个子类对象时,便是向上转型。
父类类型 变量名=new 子类类型();
如:Animal a=new Cat();
向下转型:父类类型向子类类型向下转换的过程,这个过程是强制的,一个已经向上转型的子类对象,将父类引用转换为子类引用,可以使用强制类型转换的格式,便是向下转型
当你需要访问的子类对象中"特有"的方法,此时必须是向下转型。
子类类型 变量名=new (子类类型)父类变量
如:Cat c=(Cat)a;
转型的异常
Animal a=new Cat();
a.eat();//调用的是Cat的eat
Dog d=(Dog)a;
d.run();//调用的是Dog的run,运行报错
这是因为Cat和Dog没有任何的继承关系,不符合类型转换的定义
instranceof
如果该变量属于该数据类型返回true
如果该变量不属于该数据类型返回false
Animal a=new Cat();
a.eat;
if(a instanceof Cat){
Cat c= (Cat)a;
c.run();
}else if(a instanceof Dog){
Dog d=(Dog)a;
d.run();
}
匿名对象
多数用在传参
匿名对象配构造器使用
语法:
new 类名();
功能:和正常的有名字的对象的功能是相同的。依然具备了调用属性,方法的功能。
使用场景:多数使用在传参,实参,多数情况下配合构造器使用
好处:节约资源
Arrays类,数组的工具类
数组是不是类:
- 站在JVM的角度看,是类,在JVM解析数组时,会生成一个数组的解析数组
- 站在编译角度,不是类,因为没有类名,没有结构。
链表:是一个数据结构
在链表中没有下标
在内存中,数组和链表都是最基本的数据结构,表,或者线性表。
线性表,线性的结构,它是一个含有n>=0个结点的有限序列,有且只有一个上一个结点,有且还有一个下一个结点。有头有尾的一条线
单向链表:在维护一个结点的自身的值的同时,还要维护它的下一个值的指向
双向链表:在维护一个结点的自身的值的同时,还要维护它的上一个和下一个值的指向
ArrayList和LinkedList有什么区别?
数组的缺点和优点:
缺点:空间复杂度过大
优点:便于查询和修改
链表有什么缺点和优点。