Java学习--多态
1. 多态
多态:同一个对象(实物),在不同时刻体现出来的不同状态
多态的前提:
A:要有继承关系
B:要有方法重写
C:要有父类引用指向子类对象
父类 f = new 子类()
多态中的成员访问特点:
A:成员变量
编译看左边,运行看左边
B:构造方法
创建子类的时候,访问父类的构造方法,对父类的数据进行初始化
C:成员方法
编译看左边,运行看右边
D:静态方法
编译看左边,运行看右边(静态和类相关,算不上重写,所以访问还是左边的)
由于成员方法存在方法重写,所以它运行看右边
多态的好处:
- 提高了代码的维护性(继承保证)
 - 提高了代码的扩展性(由多态保证)
 
多态的弊端:
- 不能使用子类的特有功能
 
把父类的引用强制装换为子类的引用(向下转型)
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学习--多态的更多相关文章
- Java学习——多态
		
多态:可以理解为事物存在的多种体现形态. 人:男人,女人 动物:猫,狗 猫 x = new 猫(); 动物 x = new 猫(); 1,多态的体现 父类的引用指向了自己的子类对象. 父类的引用也可以 ...
 - Java学习--封装、继承、多态
		
接下来几天会根据http://www.cnblogs.com/chenssy/category/525010.html中讲解的java内容做个学习笔记,在此感谢一下这位大仙!! 一.封装 对于封装而言 ...
 - [ Java学习基础 ] Java的继承与多态
		
看到自己写的东西(4.22的随笔[ Java学习基础 ] Java构造函数)第一次达到阅读100+的成就还是挺欣慰的,感谢大家的支持!希望以后能继续和大家共同学习,共同努力,一起进步!共勉! ---- ...
 - Java学习笔记9(面象对象9:多态)
		
多态概述 多态是继封装.继承后,面对对象的第三大特性. 现实事物经常会出现多态,如学生,学生是人的一种,则一个具体的同学张三既是学生也是人,即出现两种形态. Java作为面向对象的语言,同样可以描述一 ...
 - 学习博客之Java继承多态接口
		
这一篇博客主要是对软工前一阶段学习的总结,主要是对Java的学习总结,包括三部分:Java的继承.多态和接口 Java的继承 继承是面向对象的三大特性之一,能够实现软件的复用. Java子类继承父类的 ...
 - Java 学习笔记 ------第六章 继承与多态
		
本章学习目标: 了解继承的目的 了解继承与多态的关系 知道如何重新定义方法 认识java.lang.object 简介垃圾回收机制 一.继承 继承是java面向对象编程技术的一块基石,因为它允许创建分 ...
 - Java 学习(12):重写(Override)与重载(Overload) & 多态
		
目录 --- 重写 --- 重载 --- 多态 重写(Override) 重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变.即外壳不变,核心重写! 重写的好处在于子类可 ...
 - 《Java学习笔记(第8版)》学习指导
		
<Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...
 - 深入Java核心 Java中多态的实现机制(1)
		
在疯狂java中,多态是这样解释的: 多态:相同类型的变量,调用同一个方法时,呈现出多中不同的行为特征, 这就是多态. 加上下面的解释:(多态四小类:强制的,重载的,参数的和包含的) 同时, 还用人这 ...
 
随机推荐
- Ztree右键事件,如何让指定的子节点不显示右键菜单。
			
这里我记录一下我自己的解决方案: 1.首先在Ztree的setting设置中加一个鼠标右键回调函数onRightClick,然后在加一个beforeRightClick(具体含义可以看官方API) v ...
 - 十大基于Docker的开发工具
			
http://www.infoq.com/cn/news/2014/08/top-10-open-source-docker FlynnFlynn是一个使用Go语言编写的开源PaaS平台,Flynn使 ...
 - CloudStack tomcat集成方式分析
			
CloudStack 的server.xml和tomcat6.conf都是软连接 CloudStack 在执行脚本时报异常如下: 修改vim /etc/sudoers文件,具体如下 以 ...
 - 用 Markdown 写作(一)——添加文章页内导航
			
Markdown 可以用更简化的标记来写文章,基本的语法可以参考Markdown 语法说明 (简体中文版). 我平时很少按照论文的写法去写博客,说来忏愧,因为很少写技术性的文章,最近看到百度百科和很多 ...
 - .NET 使用HttpWebRequest 伪造Request.UrlReferrer
			
在网上找了许久关于伪造UrlReferrer地址资料,也许是搜索的关键词不对吧,还是内容涉及到了什么敏感的东西,愣是没找到,换成自定义UrlReferrer也找不到.经过仔细研究,原来在.NET中要自 ...
 - (转).Net有哪些大型项目、大型网站的案例?
			
[分享].Net有哪些大型项目.大型网站的案例? .Net开发的部分知名网站案例:http://www.godaddy.com 全球最大域名注册商http://www.ips.com 环迅支付 ...
 - 使用Qt Installer Framework制作软件安装包
			
概述 Qt Installer Framework(缩写QIF)是Qt官方用于生成软件安装包的工具.包括Qt Creator和Qt Installer Framework自身的安装包都是由这个工具制作 ...
 - 转载     二十篇java技术热文
			
转自微信公众号:java知音 1,详解java类的生命周期 2,Java反射最佳实践 3,Spring的IOC原理 4,Java并发编程:volatile关键字解析 5,Java Thread 总结 ...
 - [Training Video - 4] [Groovy] Initializing log inside class with constructor
			
TestService s = new TestService(log,context,testRunner) s.xyz() class TestService{ def log def conte ...
 - jQuery自动截取文字长度,超过部分
			
<html> <head> <meta charset="utf-8"> <script src="js/jqu ...