黑马程序员—多态
来源:互联网 发布:ios9.3.5越狱优化 编辑:程序博客网 时间:2024/06/05 05:53
多态:可理解为事物存在的多种体现形态。
人:男人、女人
动物:猫、狗
猫 c = new 猫();
动物 c = new 猫();
可理解为父类引用指向子类对象,是多态在对象上的体现性。而重载和覆盖则是多态在函数上的体现性。
下面将从以下四个方面学习多态:
1、多态的表现形式
父类的引用指向了自己的子类对象。
父类的引用也可以接收自己的子类对象。
2、多态的前提
必须是类与类之间有关系,要么继承,要么实现。
通常还有一个前提就是存在覆盖。
3、多态的好处
多态的出现大大的提高了程序的扩展性。
4、多态的弊端
提高了扩展性,但只能使用父类的引用访问父类中的成员。
5、多态如何应用
/*动物猫,狗。1、多态的表现形式父类的引用指向了自己的子类对象。父类的引用也可以接收自己的子类对象。2、多态的前提必须是类与类之间有关系,要么继承,要么实现。通常还有一个前提就是存在覆盖。3、多态的好处多态的出现大大的提高了程序的扩展性。4、多态的弊端提高了扩展性,但只能使用父类的引用访问父类中的成员。5、多态如何应用*/abstract class Animal{public abstract void eat();}class Cat extends Animal{public void eat(){System.out.println("吃鱼");}public void catchMouse(){System.out.println("抓老鼠");}}class Dog extends Animal{public void eat(){System.out.println("吃骨头");}public void kanjia(){System.out.println("看家");}}class Pig extends Animal{public void eat(){System.out.println("饲料");}public void gongdi(){System.out.println("拱地");}}//----------------------------------------class duotaiDemo{public static void main(String[] args){Animal c = new Cat();//类型提升,向上转型Animal d = new Dog();Animal p = new Pig();function(c);function(d);function(p);function(new Cat());//如果想要调用猫的特有方法时,如何操作?//强制将父类的引用转成子类类型Cat a = (Cat)c;a.catchMouse();//千万不要出现将父类对象转成子类类型的操作//我们能转换的是父类引用指向子类对象时,该引用可以被提升,也可以被强制转换//多态自始至终都是子类对象在做着变化} public static void function(Animal a) { a.eat(); }}
多态的应用:利用多态的原理,只需要完成基础功能和调用方式,就可以搭建出一个基本的框架,提高了程序的扩展性
/*多态的应用*/abstract class Student{public abstract void study();public void sleep(){System.out.println("躺着睡!");}}class DoSome{public void doSome(Student stu){stu.sleep();stu.study();}}/*利用多态只需要完成前面2个类就可以搭建一个框架,提高了程序的扩展性*/class BaseStudent extends Student{public void study(){System.out.println("学基础");}public void sleep(){System.out.println("坐着睡");}}class AdvStudent extends Student{public void study(){System.out.println("学高级");}public void sleep(){System.out.println("站着睡");}}class duotaiDemo2{public static void main(String[] args){DoSome ds = new DoSome();ds.doSome(new BaseStudent());ds.doSome(new AdvStudent());}}
多态中成员函数(非静态)的特点:
在编译时期,参阅引用型变量所属的类中是否有调用的方法,如果有,编译通过,如果没有,编译失败。
在运行时期,参阅对象所属的类中是否有调用的方法。
简单总结就是:成员函数在多态调用时,编译看左边,运行看右边。
多态中成员变量的特点:
无论编译和运行,都参考左边(引用型变量所属的类)。
在多态中,静态成员函数的特点:
无论编译和运行,都参考左边(引用型变量所属的类)。
0 0
- 黑马程序员—多态
- 黑马程序员—多态
- 黑马程序员—多态
- 黑马程序员——多态
- 黑马程序员——多态
- 黑马程序员——多态
- 黑马程序员——多态
- 黑马程序员——多态
- 黑马程序员——多态
- 黑马程序员——多态
- 黑马程序员——多态
- 黑马程序员——多态
- 黑马程序员——多态
- 黑马程序员——多态
- 《黑马程序员》多态———day07
- 黑马程序员——— 多态
- 黑马程序员——多态_实例
- 黑马程序员_JAVA基础——多态
- 阿里云主机初始化
- AndroidManifest.xml标签属性
- JAVA 将文件夹打成ZIP包
- 数据库开发(18)信息检索
- 如何判断自己是否具有成为一名优秀程序员的潜质
- 黑马程序员—多态
- NGUI控件说明(中文) UIAnchor
- 这种布局搞了我几天,熟C#老兄指导一下
- Struts1 工作流程
- 树:二叉树
- 多系统启动选择菜单删除修复要多随意有多随意(easybcd怎么用)
- 判断某年是否为闰年
- 关于UTF-8,ANSI,以及Unicode的一些文章
- 数据挖掘方法(1)主成分分析