1. 多态

多态:同一个对象(实物),在不同时刻体现出来的不同状态

多态的前提:

A:要有继承关系

B:要有方法重写

C:要有父类引用指向子类对象

父类 f = new 子类()

多态中的成员访问特点:

A:成员变量

编译看左边,运行看左边

B:构造方法

创建子类的时候,访问父类的构造方法,对父类的数据进行初始化

C:成员方法

编译看左边,运行看右边

D:静态方法

编译看左边,运行看右边(静态和类相关,算不上重写,所以访问还是左边的)

由于成员方法存在方法重写,所以它运行看右边

 

多态的好处:

  1. 提高了代码的维护性(继承保证)
  2. 提高了代码的扩展性(由多态保证)

多态的弊端:

  1. 不能使用子类的特有功能

把父类的引用强制装换为子类的引用(向下转型)

1.猫和狗多态练习

class Anamial{

    public void eat(){
System.out.println("动物吃");
} } class Dog extends Anamial{
public void eat(){
System.out.println("狗吃骨头");
}
public void lookDoor(){
System.out.println("狗看门");
}
} class Cat extends Anamial{
public void eat(){
System.out.println("猫吃鱼");
}
public void play(){
System.out.println("狗玩游戏");
} } class ExtendsDemo{
public static void main(String[] args){
System.out.println("Extends ");
//定义动物为狗
Anamial a = new Dog();
a.eat();
//a.lookDoor(); 编译会报错,动物没有狗的方法
//将动物还原成狗
Dog d = (Dog)a;
d.eat();
d.lookDoor();

//a变成猫
a = new Cat();
a.eat();
//a.play(); 编译会报错,动物没有play方法 //将动物还原为狗
Cat c = (Cat)a;
c.eat();
c.play(); //Dog dd = (Dog)a; 编译不会报错,运行报错 java.lang.ClassCastException: Cat cannot be cast to Dog
//不能将毛转换成狗 }
}

Java学习--多态的更多相关文章

  1. Java学习——多态

    多态:可以理解为事物存在的多种体现形态. 人:男人,女人 动物:猫,狗 猫 x = new 猫(); 动物 x = new 猫(); 1,多态的体现 父类的引用指向了自己的子类对象. 父类的引用也可以 ...

  2. Java学习--封装、继承、多态

    接下来几天会根据http://www.cnblogs.com/chenssy/category/525010.html中讲解的java内容做个学习笔记,在此感谢一下这位大仙!! 一.封装 对于封装而言 ...

  3. [ Java学习基础 ] Java的继承与多态

    看到自己写的东西(4.22的随笔[ Java学习基础 ] Java构造函数)第一次达到阅读100+的成就还是挺欣慰的,感谢大家的支持!希望以后能继续和大家共同学习,共同努力,一起进步!共勉! ---- ...

  4. Java学习笔记9(面象对象9:多态)

    多态概述 多态是继封装.继承后,面对对象的第三大特性. 现实事物经常会出现多态,如学生,学生是人的一种,则一个具体的同学张三既是学生也是人,即出现两种形态. Java作为面向对象的语言,同样可以描述一 ...

  5. 学习博客之Java继承多态接口

    这一篇博客主要是对软工前一阶段学习的总结,主要是对Java的学习总结,包括三部分:Java的继承.多态和接口 Java的继承 继承是面向对象的三大特性之一,能够实现软件的复用. Java子类继承父类的 ...

  6. Java 学习笔记 ------第六章 继承与多态

    本章学习目标: 了解继承的目的 了解继承与多态的关系 知道如何重新定义方法 认识java.lang.object 简介垃圾回收机制 一.继承 继承是java面向对象编程技术的一块基石,因为它允许创建分 ...

  7. Java 学习(12):重写(Override)与重载(Overload) & 多态

    目录 --- 重写 --- 重载 --- 多态 重写(Override) 重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变.即外壳不变,核心重写! 重写的好处在于子类可 ...

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

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

  9. 深入Java核心 Java中多态的实现机制(1)

    在疯狂java中,多态是这样解释的: 多态:相同类型的变量,调用同一个方法时,呈现出多中不同的行为特征, 这就是多态. 加上下面的解释:(多态四小类:强制的,重载的,参数的和包含的) 同时, 还用人这 ...

随机推荐

  1. [C++] advanced reference

    advanced reference

  2. python链接

    http://www.crifan.com/files/doc/docbook/python_beginner_tutorial/release/html/python_beginner_tutori ...

  3. [Training Video - 3] [Groovy in Detail] Non-static and Static functions, initializing log inside class

    log.info "starting" // we use class to create objects of a class Planet p1 = new Planet() ...

  4. jquery Ajax跨域请求

    这是jquery api文档对跨域请求的解析:如果获取的数据文件存放在远程服务器上(域名不同,也就是跨域获取数据),则需要使用JSONP类型.使用这种类型的话,会创建一个查询字符串参数 callbac ...

  5. win10 startup启动目录路径命令

    仅对当前用户生效: C:\Users\Username\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup 开始-运行 shel ...

  6. STM32F4库函数里面的RCC_DeInit(void)函数分析

    void RCC_DeInit(void) { /*Set HSION bit,内部高速时钟使能HSI振荡器打开*/ RCC->CR |=(uint32_t)0x00000001; /*Rese ...

  7. Mysql建表的时候创建索引

    创建表时可以直接创建索引,这种方式最简单.方便.其基本形式如下: CREATE TABLE 表名( 属性名 数据类型[完整性约束条件], 属性名 数据类型[完整性约束条件], ...... 属性名 数 ...

  8. C++ generic tools -- from C++ Standard Library

    今晚学了一下C++标准程序库, 来简单回顾和总结一下. 1.pair 结构体 // defined in <utility> , in the std namespace namespac ...

  9. 用nodejs搭建最简单、轻量化的http server(转)

    出处:http://www.cnblogs.com/wangfupeng1988/p/4143996.html 1. 引言 前端程序猿主要关注的是页面,你可能根本就用不到.net,java,php等后 ...

  10. 字节序(Endian),大端(Big-Endian),小端(Little-Endian)

    http://www.cppblog.com/tx7do/archive/2009/01/06/71276.html 在各种计算机体系结构中,对于字节.字等的存储机制有所不同,因而引发了计算机通信领域 ...