多态和抽象

多态

一个对象有多重形式的能力,相同的行为不同的实现。

一个接口,多种实现

分类

静态多态

编译时系统决定调用哪个方法

通过方法的重载实现

方法的重载满足相同的行为不同的实现

单独的重写也是静态多态

重载

1.重载只能通过不同的方法参数来区分。 例如不同的参数类型, 不同的参数个数, 不同的参数顺序。

2.不能通过访问权限、 返回类型、 抛出的异常进行重载。

重写

重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!

动态多态

运行中系统动态确定方法所指的对象

使用动态绑定和重写

1. 向上转型技术

基本数据类型 赋值左右两边的数据类型不同 分为自动类型转换  强制类型转换 使用范围 不是所有的基本数据类型都能转换 Boolean类型不可以

引用数据类型 赋值左右两端的引用数据类型不同 自动类型转换(向上转型) 强制类型转换(向下转型)使用范围 有继承关系的对象可以实现转换

编译通过且运行通过

父类引用指向子类对象

编译通过,因为子类和父类就是is-a的关系,所以子类对象就是父类类型的

运行通过,因为每个子类对象在产生过程中,都是采用内存叠加的方式先产生父类对象的部分,再叠加子类特有,所以这个子类对象有父类类型定义的一切内容

唯一的问题:当使用父类引用指向子类对象的时候该引用只能操作到改对象身上继承与父类的属性和行为,操作不到这个子类对象特有的属性和行为。

本类引用指向本类对象

特例: 如果子类重写了父类的行为,那么只要对象是子类对象,不管用什么引用去指向效果都是子类重写后的效果

2. instanceof关键字

父类引用可以指向任意一个子类对象,并且是自动类型转换我们在书写代码时,手里有一个父类引用,那么我们不能确定它到底指向那种数据类型。

这时使用instanceof关键字判断。

!!!判断某个对象是不是某个数据类型

返回类型true/false

if(this.对象 instanceof 对象类型){}

instanceof是一个关键字也是一个运算符

3. 动态绑定机制

方法调用与方法所在的类关联起来称为绑定

######## 动态多态

######## 1.给的是父类引用

######## 2.因为父类引用只能看见父类的部分,所以这个方法一定要定义在父类身上,然后子类重写

######## 动态绑定技术

######## 运行时根据父类引用变量所指向对象那个的实际类型执行相应的子类方法,从而实现多态性

实现

通过动态绑定和重写机制实现多态

多态主要应用

1. 多态参数

2. 异构集合

多态总结

1. 使用父类类型的引用指向子类对象

2. 该引用只能调用父类中定义的方法,不能调用子类中独有的方法

3. 如果子列中重写了父类中的一个方法,那么在调用这个方法时,将会调用子类中的这个方法

4. 在多态中,子类可以调用父类中所有的方法

抽象

编写类时,通常会在类中定义一些方法,面熟该类所具有的行为。在类的方法中,编写代码实现该类所执行的行为。

关键字 abstract

抽象类 和 抽象方法

在方法修饰符部分书写abstract修饰符,方法不能有实现部分没有{}方法的参数列表后用;结束

public abstract class 类名{}

public abstract void 方法名();

父类的某些方法只能确定方法的声明,即子类相同方法有什么名字,参数返回类型,访问修饰符,但是不能确定方法的具体实现,所有方法的具体实现由子类重写

抽象类 和 实现类

抽象类 包括了子类中共有的属性和方法

实现类 实现父类的属性和方法

抽象方法 和 实现方法

抽象方法 方法的声明有参数列表但是什么都不做

实现方法    通过对抽象方法的重写实现具体功能

抽象类与抽象方法的关系

有抽象方法一定有抽象类

有抽象类不一定有抽象方法

但是从设计上来说,如果一个抽象类没有抽象方法,那么就失去了抽象的意义

抽象是可以通过继承传递的

如果子类只实现了父类的部分抽象方法则子类仍具有抽象方法,这个子类也必须是抽象类

抽象类

某些类的设计用途就是用来做父类的不是用来产生对象的

为了避免误操作,把这种类设计为抽象类

抽象方法

父类的某些方法,只能确定方法声明不能确定方法的实现

在编译期强制要求子类的实现方法必须重写来自父类的方法

抽象类的影响

抽象类只是不能产生对象

不影响其他内容,类中的属性,行为,构造,初始化块都可以有

仍然可以指向子类对象,访问共有属性行为

与子类的关系还是is-a的关系

抽象类和抽象方法的好处

将一个抽象方法放在父类中,可以强制任何子类实现一个特别的行为。继承抽象方法的子类如果想要实例化对象,必须重写该方法

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值