一、多态

 (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:静态方法
         编译看左边,运行看左边


class Fu {
public int num = 100; public void show() {
System.out.println("show Fu");
} public static void function() {
System.out.println("function Fu");
}
} class Zi extends Fu {
public int num = 1000;
public int num2 = 200; public void show() {
System.out.println("show Zi");
} public void method() {
System.out.println("method zi");
} public static void function() {
System.out.println("function Zi");
}
} class DuoTaiDemo {
public static void main(String[] args) {
//要有父类引用指向子类对象。(向上转型)
//父 f = new 子();
Fu f = new Zi();
//调用成员变量时,编译时看父类,父类有才能通过编译,运行时也看父类的,因为我们看到的是“父亲” System.out.println(f.num); //System.out.println(f.num2);编译错误,找不到符号(父亲没有这个变量) //调用成员方法时,编译时看父亲,只有父亲有,我们才能用,运行时看子类(右边),因为我们本质还是“孩子”,不是“父亲”
 f.show();
//f.method();编译错误找不到符号(父亲没有这个方法)
     //调用静态方法时,编译看父类,运行也看父类,因为静态和类相关,算不上重写,所以,访问还是左边的
f.function();
}
}

(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. 一个想法(续四):IT技术联盟创业众筹进度公示

    为了将整个创业过程更加的公开公正透明化,特开此篇用于展示众筹进度. 首轮众筹进度如下:(每天24点更新1次)

  2. 三层——vb.net版

    经过不懈的努力,我的vb.net 版的三层登陆终于实现了.下面将我的成果向大家展示一下. 原则          vb.net的三层登陆跟C#的三层登陆的思想是一样的都是将系统分层--U层只负责与用户 ...

  3. Linux 6.4 partprobe出现warning问题

    今天在给服务器做LVM的时候(服务器的系统是CentOS 6.3),用fdisk分区之后,用w写入分区表的时候,就提示Command (m for help): wThe partition tabl ...

  4. jQuery插件,将内容插入到光标处

    (function ($) { $.fn.extend({ insertAtCaret : function (myValue) { var $t = $(this)[0]; if (document ...

  5. YoMail 邮箱客户端的社会化之路,起于邮箱,不止于邮件

    你还记不记得上一次用邮箱处理私人事务是什么时候?从什么时候开始邮箱于你而言,唯一功能沦为了收取各种网站的验证信息? 电子邮件实际上非常适合于工作上使用,比起其他通信工具,或者社会化媒体,电子邮件在工作 ...

  6. 每天一个Linux命令(09)--touch命令

    linux的touch命令不常用,一般在使用make的时候可能会用到,用来修改文件时间戳,或者新建一个不存在的文件. 1.命令格式: touch  [选项]··· 文件··· 2.命令参数: -a 或 ...

  7. C语言中NULL的定义

    用C语言编程不能不说指针,说道指针又不能不提NULL,那么NULL究竟是个什么东西呢? C语言中又定义,定义如下: #undef NULL #if defined(__cplusplus) #defi ...

  8. H5微场景宽、高度自适应办法

    最近在做一些手机端微场景,发现处理各种手机屏幕分辨率是个很让人头疼的事情,最终找到了一个处理效果比较满意的方案.各位客观请往下看: 如果有过做微场景经历的客官们应该都了解,在代码中给一个元素的宽高设成 ...

  9. String类的indexOf方法的用法和举例

    2017年3月3号博主第一次去郑州互联网公司面试,背景是这样的我先前去了农大龙子湖校园招聘投简历,然后第二天去面试了那经历可以说是很失败的一次面试,当然这跟自己的水平有关了接下来重点讲一下面试的题目: ...

  10. Java并发之任务的描述和执行

    简单概念 <Java编程思想>对并发概念的重要性阐述: Java是一种多线程语言,并且提出了并发问题,不管你是否意识到了.因此,有很多使用中的Java程序,要么只是偶尔工作,要么是在大多数 ...