一、多态

 (1)定义:同一个对象在不同时刻体现出来的不同状态。父类的引用或者接口的引用指向了自己的子类对象。   

      Dog d = new Dog();//Dog对象的类型是Dog类型。

    Animal a = new Dog();//Dog对象的类型右边是Dog类型,左边Animal类型。

 (2)多态的前提:
        A:有继承或者实现关系。
        B:有方法重写。
        C:有父类或者父接口引用指向子类对象。
  
      多态的分类:
         a:具体类多态
            class Fu {}
            class Zi extends Fu {}
    
            Fu f = new Zi();
         b:抽象类多态
            abstract class Fu {}
            class Zi extends Fu {}
    
            Fu f = new Zi();
         c:接口多态
            interface Fu {}
            class Zi implements Fu {}
    
            Fu f = new Zi();

(3)多态的好处:
      A:提高代码的维护性(继承体现)
      B:提高代码的扩展性(多态体现)

  (4)多态的弊端

    通过父类引用操作子类对象时,只能使用父类中已有的方法,不能操作子类特有的方法。

    现象:
         子可以当作父使用,父不能当作子使用。

(5)多态中的成员访问特点
      A:成员变量
         编译看左边,运行看左边
      B:构造方法
         子类的构造都会默认访问父类构造
      C:成员方法
         编译看左边,运行看右边
      D:静态方法
         编译看左边,运行看左边

  1.  
  1. class Fu {
  2. public int num = 100;
  3.  
  4. public void show() {
  5. System.out.println("show Fu");
  6. }
  7.  
  8. public static void function() {
  9. System.out.println("function Fu");
  10. }
  11. }
  12.  
  13. class Zi extends Fu {
  14. public int num = 1000;
  15. public int num2 = 200;
  16.  
  17. public void show() {
  18. System.out.println("show Zi");
  19. }
  20.  
  21. public void method() {
  22. System.out.println("method zi");
  23. }
  24.  
  25. public static void function() {
  26. System.out.println("function Zi");
  27. }
  28. }
  29.  
  30. class DuoTaiDemo {
  31. public static void main(String[] args) {
  32. //要有父类引用指向子类对象。(向上转型)
  33. //父 f = new 子();
  34. Fu f = new Zi();
  35. //调用成员变量时,编译时看父类,父类有才能通过编译,运行时也看父类的,因为我们看到的是“父亲”
  36.  
  37. System.out.println(f.num);
  38.  
  39. //System.out.println(f.num2);编译错误,找不到符号(父亲没有这个变量)
  40.  
  41. //调用成员方法时,编译时看父亲,只有父亲有,我们才能用,运行时看子类(右边),因为我们本质还是“孩子”,不是“父亲”
  42.  f.show();
  43. //f.method();编译错误找不到符号(父亲没有这个方法)
  44.      //调用静态方法时,编译看父类,运行也看父类,因为静态和类相关,算不上重写,所以,访问还是左边的
  45. f.function();
  46. }
  47. }
  1.  

(6)多态转型问题:
      向上转型:
         Fu f = new Zi();
      向下转型:
         Zi z = (Zi)f; //要求该f必须是能够转换为Zi的。

java学习笔记 --- 多态的更多相关文章

  1. 《Java学习笔记(第8版)》学习指导

    <Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...

  2. Java学习笔记:语言基础

    Java学习笔记:语言基础 2014-1-31   最近开始学习Java,目的倒不在于想深入的掌握Java开发,而是想了解Java的基本语法,可以阅读Java源代码,从而拓展一些知识面.同时为学习An ...

  3. Java学习笔记4

    Java学习笔记4 1. JDK.JRE和JVM分别是什么,区别是什么? 答: ①.JDK 是整个Java的核心,包括了Java运行环境.Java工具和Java基础类库. ②.JRE(Java Run ...

  4. Java学习笔记心得——初识Java

    初识Java 拿到这本厚厚的<Java学习笔记>,翻开目录:Java平台概论.从JDK到TDE.认识对象.封装.继承与多态...看着这些似懂非懂的术语名词,心里怀着些好奇与担忧,就这样我开 ...

  5. Java学习笔记之---面向对象

    Java学习笔记之---面向对象 (一)封装 (1)封装的优点 良好的封装能够减少耦合. 类内部的结构可以自由修改. 可以对成员变量进行更精确的控制. 隐藏信息,实现细节. (2)实现封装的步骤 1. ...

  6. java学习笔记之基础篇

    java选择语句之switch   //switch可以用于等值判断 switch (e) //int ,或则可以自动转化成int 的类型,(byte char short)枚举jdk 7中可以防止字 ...

  7. java学习笔记之OOP(二)

    java学习笔记二.面向对象[OOP]Object Oriented Programming 一.三大特性: 1.封装:隐藏对象的属性和实现细节,仅对外提供公共访问方式,将变化隔离,便于使用,提高复用 ...

  8. 0037 Java学习笔记-多线程-同步代码块、同步方法、同步锁

    什么是同步 在上一篇0036 Java学习笔记-多线程-创建线程的三种方式示例代码中,实现Runnable创建多条线程,输出中的结果中会有错误,比如一张票卖了两次,有的票没卖的情况,因为线程对象被多条 ...

  9. 0035 Java学习笔记-注解

    什么是注解 注解可以看作类的第6大要素(成员变量.构造器.方法.代码块.内部类) 注解有点像修饰符,可以修饰一些程序要素:类.接口.变量.方法.局部变量等等 注解要和对应的配套工具(APT:Annot ...

随机推荐

  1. Codeforces 712B

    B. Memory and Trident time limit per test:2 seconds memory limit per test:256 megabytes input:standa ...

  2. java_XML_比较【转】

    JAVA解析XML的方式DOM.SAX.DOM4J.JDOM.StAX之详解与比较 1.各种方式的详解 1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官 ...

  3. ion-scroll zooming="true" android端无法缩放的问题

    很久很久没更新博客了,从今天开始决定以后陆续写一些博文,总结下自己在开发中碰到的问题. ionic项目.ion-scroll zooming="true" 在android端无法缩 ...

  4. iOS真机测试友盟碰到错误linker command failed with exit code 1 (use -v to see invocation) 百度地图的检索失败 sqlite 错误码

    因为友盟不支持bitcode 在模拟器上运行正常,但是在模拟器上就会报错,这是因为xocde7之后增加了一个bitcode,bitcode是被编译程序的一种中间形式的代 码.包含bitcode配置的程 ...

  5. Error:Failed to open zip file. Gradle's dependency cache may be corrupt (this sometimes occurs after a network connection timeout.)

    刚开始写博客,可能有点语无伦次,请大家见谅.... 今天我们来讲讲AS出现下面图片原因的问题 同学们,刚看到这个,是不是有点小懵逼,不要怕,今天我们就来讲讲,出现这个问题的原因 今天我在AS(Andr ...

  6. TCP/IP协议族(三) 数字签名与HTTPS详解

    前面几篇博客聊了HTTP的相关东西,今天就来聊一聊HTTPS的东西.因为HTTP协议本身存在着明文传输.不能很好的验证通信方的身份和无法验证报文的完整性等一些安全方面的确点,所以才有了HTTPS的缺陷 ...

  7. c语言中,有符号数位移

    #include <stdio.h> int main(void) { unsigned i = 0xcffffff3; long j=0xcffffff3; int k=0xcfffff ...

  8. 基于DDD的.NET开发框架ABP实例,多租户 (Sass)应用程序,采用.NET MVC, Angularjs, EntityFramework-介绍

    介绍 基于ABPZERO的多租户 (Sass)应用程序,采用ASP.NET MVC, Angularjs-介绍 ASP.NET Boilerplate作为应用程序框架. ASP.NET MVC和ASP ...

  9. 解决CSS中float:left后需要clear:both清空

    现在,大部分的横排导航都是通过 ul -> li *n -> a 来实现的.具我所知,要达到这种效果,有几种方法可以实现. 1.传统处理方式: li {float:left;}/*这样,对 ...

  10. 初探Lambda表达式/Java多核编程【3】Lambda语法与作用域

    接上一篇:初探Lambda表达式/Java多核编程[2]并行与组合行为 本节是第二章开篇,前一章已经浅显地将所有新概念点到,书中剩下的部分将对这些概念做一个基础知识的补充与深入探讨实践. 本章将介绍L ...