多 态:函数本身就具备多态性,某一种事物有不同的具体的体现。

体现:父类引用或者接口的引用指向了自己的子类对象。//Animal a = new Cat();

多态的好处:提高了程序的扩展性。

多态的弊端:当父类引用指向子类对象时,虽然提高了扩展性,但是只能访问父类中具备的方法,不可以访问子类中特有的方法。(前期不能使用后期产生的功能,即访问的局限性)

多态的前提:

1:必须要有关系,比如继承、或者实现。

    2:通常会有覆盖操作。

 

多态的出现思想上也做着变化:以前是创建对象并指挥对象做事情。有了多态以后,我们可以找到对象的共性类型,直接操作共性类型做事情即可,这样可以指挥一批对象做事情,即通过操作父类或接口实现。

--------------------------------------------------------------

class 毕姥爷{

void 讲课(){

System.out.println("企业管理");

}

void 钓鱼(){

System.out.println("钓鱼");

}

}

class 毕老师 extends 毕姥爷{

void 讲课(){

System.out.println("JAVA");

}

void 看电影(){

System.out.println("看电影");

}

}

class {

public static void main(String[] args) {

毕姥爷 x = new 毕老师(); //毕老师对象被提升为了毕姥爷类型。

//      x.讲课();

//      x.看电影();  //错误.

毕老师 y = (毕老师)x; //将毕姥爷类型强制转换成毕老师类型。

y.看电影();//在多态中,自始自终都是子类对象在做着类型的变化。

}

}

---------------------------------------------------------------

如果想用子类对象的特有方法,如何判断对象是哪个具体的子类类型呢?

可以可以通过一个关键字 instanceof ;//判断对象是否实现了指定的接口或继承了指定的类

格式:<对象 instanceof 类型> ,判断一个对象是否所属于指定的类型。

Student instanceof Person = true;//student继承了person类

多态在子父类中的成员上的体现的特点:

1,成员变量:在多态中,子父类成员变量同名。

在编译时期:参考的是引用型变量所属的类中是否有调用的成员。(编译时不产生对象,只检查语法错误

运行时期:也是参考引用型变量所属的类中是否有调用的成员。

简单一句话:无论编译和运行,成员变量参考的都是引用变量所属的类中的成员变量。

再说的更容易记忆一些:成员变量 --- 编译运行都看 = 左边。

2,成员函数。

编译时期:参考引用型变量所属的类中是否有调用的方法。

运行事情:参考的是对象所属的类中是否有调用的方法。

为什么是这样的呢?因为在子父类中,对于一模一样的成员函数,有一个特性:覆盖。

简单一句:成员函数,编译看引用型变量所属的类,运行看对象所属的类。

更简单:成员函数 --- 编译看 = 左边,运行看 = 右边。

3,静态函数。

编译时期:参考的是引用型变量所属的类中是否有调用的成员。

运行时期:也是参考引用型变量所属的类中是否有调用的成员。

为什么是这样的呢?因为静态方法,其实不所属于对象,而是所属于该方法所在的类。

调用静态的方法引用是哪个类的引用调用的就是哪个类中的静态方法。

简单说:静态函数 --- 编译运行都看 = 左边。

最新文章

  1. CSS垂直居中的方法
  2. 高性能 Windows Socket 组件 HP-Socket v2.3.1-beta-2 发布
  3. java接口(二)
  4. jquery为新增元素添加事件
  5. Umbraco(5)-Creating Master Template Part 1(翻译文档)
  6. 【转】使用nmon监控suse或linux操作系统
  7. locale 详解
  8. Android中调用Paint的measureText()方法取得字符串显示的宽度值
  9. c语言else匹配问题
  10. rsa 密钥和公钥的生成
  11. intent.getAction()
  12. [MSSQL]最小公约数
  13. 【Python3之异常处理】
  14. mysql int(19) float(7,2) decimal(7,2)对比
  15. oracle传输表空间相关
  16. 完成端口IOCP详解
  17. js和thinkphp5路由拼接一个实例
  18. Python 线程同步锁, 信号量
  19. Sift中尺度空间、高斯金字塔、差分金字塔(DOG金字塔)、图像金字塔
  20. 使用 IntraWeb (14) - 基本控件之 TIWHRule、TIWRectangle

热门文章

  1. 交换排序(2)——冒泡排序(bubble sort)
  2. GoLang笔记-数组和切片,本质是就是长度不可变的可变的区别
  3. cf 749D Leaving Auction
  4. Python猜年龄
  5. bzoj2216
  6. codevs4511信息传递(Tarjan求环)
  7. Django总结三
  8. 用Python一键搭建Http服务器的方法
  9. Android java.lang.RuntimeException: Canvas: trying to use a recycled bitmap android.graphics.Bitmap@412d7230
  10. STL之vector篇