多态与抽象

多态:相同的行为,不同的实现
• 多态是体现在方法上的
• 在javaoo中,多态是指一个对象有多种形式的能力
• 多态分为:静态多态和动态多态
静态多态:指在编译期就已知方法执行的最终效果
动态多态:指在编译期未知,在运行期根据绑定对象的不同有不同的效果
• 多态的实现:
静态多态:使用重载实现
动态多态:使用动态绑定和重写实现(动态绑定技术和方法重写)

动态绑定:
• 转型技术:当操作符两端的数据类型不一致的时候,就会发生转型
• Double d = 5; 当小数据放入大空间,自动类型转换(也称向上转型)
• int a = (int)3.14;当大的数据往小的空间存放,必须强转(也称向下转型)
• 引用数据类型同样存在转型技术,转型的两个必须存在继承关系
1.当数据类型之间没有关系的时候,是不能转的,但是两者之间有关系的时候是可以转
2.向上转型—-自动转型,指的是父类的引用可以指向子类的对象
SuperClass fc = new SubClass(); ——> 父类引用指向子类对象
(此时两个之间的关系是继承,若没有继承关系就转不了)
(本类引用指向本类对象 父类引用指向子类对象。这两种说法是对的)
3.向下转型
本类的引用指向本类的对象
SubClass sc = (SubClass)fc;
4.当父类引用指向子类对象的时候,只能调用到来自父类的属性和行为(受访问修饰符约束)
5.当本类引用指向本类对象的时候,能看到本类所有的属性和行为(受访问修饰符约束)
6.引用数据类型强转风险是:有可能完全指不过去,有可能编译成功,运行失败。必须保证运行的最终效果是父类引用指向子类对象或者本来引用指向本类对象

多态的主要应用:多态参数、异构集合
多态参数,就是当方法的某个形式是一个引用的时候,与该引用兼容的任何对象都可以传递方法,从而允许放大接受不同那个数据类型的形式参数
异构集合,是创建一个不是同一类型,但是有共同父类的数据集合。不同对象的集合称为异构集合

抽象:
1.抽象方法:只有方法的声明,没有方法的实现。
eg:public abstract void response(); 可以有参数或者是无参数
2.前面必须加上一个 abstract 表示这是一个抽象方法
3.当一个类的方法有抽象方法的时候,这个类叫做抽象类,在抽象类中不能new(产生)对象,因此在类的声明部分也需要加上一个关键字 abstract 表示是一个抽象类
5.抽象类是专门拿来产生子类的
6.抽象类的时候直接类上面和方法上加abstract 且没有实现。
7.子类继承抽象类后,必须实现父类所有的抽象方法,否则自己也是抽象类
8.抽象类也是一个类,所以只能做单继承
9.子类和抽象类的关系还是应该满足is–a关系

抽象在语法上:
1.任何一个只要拥有关键字abstract 就是一个抽象类
2.类下面可以有属性,可以有构造,可以有行为
3.在抽象类中的构造是,虽然抽象类中不能产生对象,但它还是要具有构造方法,为了帮助子类产生对象中的父类对象部分
4.抽象类中可以具备非抽象方法
语法上,抽象类不一定具有抽象方法,有抽象方法的一定是抽象类
设计上,没有抽象方法的抽象类失去了设计意义
5.抽象方法是没有方法的实现,连花括号都没有。

多态总结:
使用父类类型的引用指向子类的对象
该引用只能调用父类中定义的方法,不能调用子类中独有的方法
如果子类中重写了父类中的一个方法,那么在调用这个方法的时候,将会调用子类中的这个方法
在多态中,子类可以调用父类中的所有方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值