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. 【HDU2138】How many prime numbers

    [题目大意] 给n个数判断有几个素数.(每个数<=2^32) 注意多组数据 [题解] 用Rabin_Miller测试跑得飞快... /************* HDU 2138 by chty ...

  2. functions函数插件的定义和使用

    创建Smarty插件:在插件目录(plugins)里新建文件 类型.插件名.php文件,然后插件方法名字书写规范: smarty_类型_插件名([...]){}在模板(tpl文件)中调用插件时格式{插 ...

  3. sublime 3插件安装记录

    安装sublime 3的package control管理器: 从菜单 View - Show Console 或者 ctrl + ~ 快捷键,调出 console.将以下 Python 代码粘贴进去 ...

  4. [GO]方法值和方法表达式

    package main import "fmt" type Person struct { name string sex byte age int } func (p Pers ...

  5. Qt之QML开发常用知识

    小技巧: 1. QML的内部逻辑可以直接调试 2. ctrl+ alt + space,在写QML时,可以直接调出工具条 3. 属性以小写字母开发 4. 属性改变事件,基本都是on+Property+ ...

  6. 使用virtualBox安装CentOS 6.3的详细步骤

    由于前几天把系统升级到win7了,原先安装的Linux虚拟机都不存在了.基于学习,这次安装选择的是CentOS 6.3版本. 下面就看看具体的安装步骤: 名称可以随便填写,类型选择Linux,版本选择 ...

  7. ubuntu创建wifi热点plasma-nm

    第一步:安装 plasma-nm sudo apt-get install plasma-nm 第二步:启动程序 可以使用 Alt+F2 后,搜索 kde-nm-connection-editor 也 ...

  8. 编写高质量代码改善C#程序的157个建议——建议96:成员应优先考虑公开基类型或接口

    建议96:成员应优先考虑公开基类型或接口 类型成员如果优先考虑公开及类型或接口,那么会让类型支持更多的应用场合. FCL中最典型的例子是集合的功能操作.集合根据功能划分有多种类型,比如List< ...

  9. 引用数据数据类型Scanner、Random

    键盘录入Scanner 获取键盘录入的数据,对获取数据的具体操作进行了封装,只需要调用方法,即可得到键盘录入的数据 A:导包            import java.util.Scanner;  ...

  10. sql语句有几种写法

    sql语句有几种写法 1:SELECT * FROM tablename ORDER BY RAND() LIMIT 想要获取的数据条数: 2:SELECT *FROM `table` WHERE i ...