黑马程序员_面向对象之多态
来源:互联网 发布:java创建一个学生类 编辑:程序博客网 时间:2024/04/30 20:52
------- android培训、java培训、期待与您交流! ----------
面向对象之多态
定义:某一类事物的多种存在形态。
如狗是狗,也是动物;水的三种形态;
体现:父类或接口的引用指向或者接收自己的子类对象;
好处:多态的存在提高了程序的扩展行和后期维护性,同一个父类的引用可以指挥一批对象做事情。
前提:A.存在着继承或者实现关系
B:有方法的重写
C:父类(接口)引用指向子类(实现)对象
好处:多态的存在提高了程序的扩展性和后期可维护性
弊端:虽然可以预先使用,但是只能访问父类中已有的功能,运行的是后期子类的功能,不能预先使用子类中定义的特有功能。
这个时候要么创建子类对象,调用其特有方法,也可以将父类的引用强转成子类类型,然后赋给子类的引用,然后调用方法。
如:Fu f = new Zi( );
Zi zi = (Zi)f;
Zi.method();
多态中对象调用成员的特点:参考:刘意_DuoTaiDemo3.java,内存图!自己画图理解!
Fu f = new Zi();
A:成员变量
编译看左边,运行看左边(不论是否静态修饰,因为变量不存在重写)
B:成员方法
编译时看左边的的引用变量所属的类是否有所调用的成员方法;
运行时看对象所属的类是否有所调用的成员方法;
简单而言即:编译看左边,运行看右边(因为方法存在重写)
C:静态方法
编译看左边,运行看左边(因为静态方法和变量与对象无关,这样就与多态无关了)
练习:
class Animal{
public void eat(){
}
}
class Dog extends Animal{
public void eat(){
System.out.println("dog eat");
}
public void play(){
System.out.println("dog play");
}
}
class Cat extends Animal{
public void eat(){
System.out.println("cat eat");
}
}
class DuoTaiTest{
public static void main(String[] args)
{
Animal a = new Cat(); //多态,向上转型
a.eat();//"cat eat"
a = new Dog();
a.eat();//dog eat
//a.play();
Dog d = (Dog)a; //向下转型
d.eat();//dog eat
d.play();//dog play
//ClassCastException
Cat c = (Cat)a;//编译时不报错,因为语法没问题
c.eat();//ClassCastException
}
}
- 黑马程序员_面向对象之多态
- 黑马程序员_面向对象之多态
- 黑马程序员_面向对象之多态
- 黑马程序员-C#面向对象之多态
- 黑马程序员 ---- 面向对象之多态 Day01
- 黑马程序员__面向对象之多态
- 奋斗黑马程序员----面向对象之多态小结
- 黑马程序员——C#面向对象之多态
- 黑马程序员_Java基础Day08_面向对象之多态(Done)
- 黑马程序员——面向对象之多态
- 黑马程序员笔记——Java面向对象之多态
- 黑马程序员----------面向对象三大特性之多态
- 黑马程序员——面向对象的特性之多态
- 黑马程序员————面向对象之多态
- 黑马程序员------面向对象之多态,抽象,接口.
- 黑马程序员@面向对象之多态和接口
- 黑马程序员_面向对象
- 黑马程序员_面向对象
- 对话框的DatePicker和TimePicker的使用(学习笔记)
- java email 邮件
- 安装选择构筑RubyMine IDE开发工具的Coffeescript+node.js开发环境(for windows)
- mush上线,一篇关于技术的博客,欢迎关注!
- CFile和CStdioFile的文件读写使用方法
- 黑马程序员_面向对象之多态
- Oracle Clusterware evicts the node from the cluster when
- 事件组件sencha touch 学习笔记
- 循环左移字符串的相同串数
- .NET三层登陆实例
- "adb"不是内部命令和sudo: adb: command not found
- 10110 - Light, more light
- 斯特灵数 hdu 3625
- 动态静态网页EasyUI DataGrid 动态新增 Toolbar