2022-07-25 第四小组 多态

多态的基础语法:

        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类,数组的工具类

数组是不是类:

  1. 站在JVM的角度看,是类,在JVM解析数组时,会生成一个数组的解析数组
  2. 站在编译角度,不是类,因为没有类名,没有结构。

链表:是一个数据结构

在链表中没有下标

在内存中,数组和链表都是最基本的数据结构,表,或者线性表。

线性表,线性的结构,它是一个含有n>=0个结点的有限序列,有且只有一个上一个结点,有且还有一个下一个结点。有头有尾的一条线

单向链表:在维护一个结点的自身的值的同时,还要维护它的下一个值的指向

双向链表:在维护一个结点的自身的值的同时,还要维护它的上一个和下一个值的指向

ArrayList和LinkedList有什么区别?

数组的缺点和优点:

缺点:空间复杂度过大

优点:便于查询和修改

链表有什么缺点和优点。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值