JAVA多态
多态是指当系统A访问系统B的服务时,系统B可以通过多种方式来提供服务,而这一切对系统A是透明的.比如动物园的饲养员能够给各种各样的动物喂食.下图显示了饲养员Feeder,食物Food和动物Animal及它的子类的类框图.

可以把Feeder,Animal和Food都看成独立的子系统.Feeder类的定义如下:
public class Feeder{
public void feed(Animal animal,Food food){
animal.eat(food);
}
}
以下程序演示了一个饲养员分别给一只狗喂肉和猫喂鱼.
Feeder feeder=new Feeder();
Animal animal=new Dog();
Food food=new Bone();
feeder.feed(animal,food);//给dog喂肉
animal=new Cat();
food=new Fish();
feeder.feed(animal,food);//给cat喂鱼
以上animal变量被定义为Aniaml类型,但实际上有可能引用Dog或Cat的实咧.在Feeder类的feed()方法中调用animal.eat()方法,Java虚拟机会执行animal变量所引用的实咧的eat()方法.可见animal变量有多种状态,一会儿是猫,一会儿是狗,这个就是多态的字母含义.
Java语音允许某个类型的引用变量引用子类的实咧,而且可以对这个引用变量进行类型转换.
Animal animal=new Dog();
Dog dog=(Dog)animal;
Creature creature=animal;
如果把引用变量转换为子类类型,则称为向下转型,如果把引用变量转换为父类类型,则称为向上转型.在进行引用变量的转换时,会受到各种静态属性,静态方法,实烈方法,以及从父类中继承的方法和属性时,Java虚拟机会采用不同的绑定机制.
通过具体的例子来演示多态的各种特性.在下图中父类Base和子类Sub中都定义了实例变量var,实例方法method(),静态变量staticVar和静态方法staticMethod(),此外,在Sub类中还定义了实例变量subVar和subMethod().

Sub.java:
package poly;
class Base{
String var="BaseVar";//实例变量
static String staticVar="StaticBaseVar";//静态变量
void method(){ //实例方法
System.out.println("Base method");
}
static void staticMethod(){ //静态方法
System.out.println("Static Base method");
}
}
public class Sub extends Base{
String var="SubVar"; //实例变量
static String staticVar="StaticSubVar'; // 静态变量
void method(){ //覆盖父类的method()方法
System.out.println("Sub method");
}
static void staticMethod(){ //隐藏父类的staticMethod()方法
Syatem.out.println("Static Sub method");
}
String subVar="Var only belonging to Sub";
void subMethod(){
System.out.println("Method only belonging to Sub");
}
public static void main(String args[]){
Base who=new Sub(); //who被声明为Base类型,引用Sub实例
System.out.println("who.var="+who.var); //打印Base类的var变量
System.out.println("who.staticVar="+who.staticVar); //打印Base类的staticVar变量
who.method(); //打印Sub实例的method()方法
who.staticMethod(); //打印Base类的staticMethod()方法
}
}
今天先写这么多,请多多指教.
JAVA多态的更多相关文章
- Java 多态——与C++的比较
学习了Java和C++之后,由于长期不使用C++,而java的基础知识掌握不牢,现在已经搞不清java多态了.现在先来谈谈java多态,稍后有时间再更新C++的多态,并进行比较~ 一. Java的多态 ...
- C++和java多态的区别
C++和java多态的区别 分类: Java2015-06-04 21:38 2人阅读 评论(0) 收藏 举报 转载自:http://www.cnblogs.com/plmnko/archive ...
- 深入理解Java多态机制
从字节码层面来看,Java中的所有方法调用,最终无外乎转换为如下几条调用指令. invokestatic: 调用静态方法. invokespecial: 调用实例构造器<init>方法,私 ...
- Java 多态 父类和子类方法的访问控制权限
Java 多态 父类和子类方法的访问控制权限 @author ixenos 父类和子类方法的访问控制权限 继承是为了扩展类的功能,而这种扩展显然就是对一个原始类的扩展,目的还是向上转型来调用,所以这就 ...
- Java多态(二)
public class ExtendsTest { public static void main(String[] args) { A a1 = new A(); A a2 = new B(); ...
- 从JVM角度看Java多态
首先,明确一下,Java多态的三个必要条件: 1. 继承 2. 子类重写父类方法 3. 父类引用指向子类对象 然后看一个例子 package test.xing; class Father{ prot ...
- 关于java多态的理解
要理解多态,就必须有一个大的理解方向,不然很容易绕进去. 首先知道多态的释义:多态性是指一个名词可以有多种语义. 对于java的多态性学习者来说,就是必须要知道多个同名方法在不同情况下的使用规则. j ...
- Java经验杂谈(2.对Java多态的理解)
多态是面向对象的重要特性之一,我试着用最简单的方式解释Java多态: 要正确理解多态,我们需要明确如下概念:・定义类型和实际类型・重载和重写・编译和运行 其中实际类型为new关键字后面的类型. 重载发 ...
- 学JAVA第十六 天,JAVA多态
今天老师讲了多态的使用 多态是同一个行为具有多个不同表现形式或形态的能力. 多态的优点: 1. 消除类型之间的耦合关系 2. 可替换性 3. 可扩充性 4. 接口性 5. 灵活性 6. 简化性 我个 ...
- 对java多态的理解
java多态,如何理解父类引用指向子类对象 要理解多态性,首先要知道什么是“向上转型”. 我定义了一个子类Cat,它继承了Animal类,那么后者就是前者是父类.我可以通过 Cat c = new C ...
随机推荐
- 手动添加kdump
背景: Linux嵌入式设备内核挂死后,无法自动重启,需要手动重启.而且如果当时没有连串口的话,就无法记录内核挂死时的堆栈,所以需要添加一种方式来记录内核挂死信息方便以后调试使用.设备中增加k ...
- Android学习路线总结,绝对干货
title: Android学习路线总结,绝对干货 tags: Android学习路线,Android学习资料,怎么学习android grammar_cjkRuby: true --- 一.前言 不 ...
- 马里奥AI实现方式探索 ——神经网络+增强学习
[TOC] 马里奥AI实现方式探索 --神经网络+增强学习 儿时我们都曾有过一个经典游戏的体验,就是马里奥(顶蘑菇^v^),这次里约奥运会闭幕式,日本作为2020年东京奥运会的东道主,安倍最后也已经典 ...
- Java 堆内存与栈内存异同(Java Heap Memory vs Stack Memory Difference)
--reference Java Heap Memory vs Stack Memory Difference 在数据结构中,堆和栈可以说是两种最基础的数据结构,而Java中的栈内存空间和堆内存空间有 ...
- [原] KVM 虚拟化原理探究(3)— CPU 虚拟化
KVM 虚拟化原理探究(3)- CPU 虚拟化 标签(空格分隔): KVM [TOC] CPU 虚拟化简介 上一篇文章笼统的介绍了一个虚拟机的诞生过程,从demo中也可以看到,运行一个虚拟机再也不需要 ...
- maven-sprigmvc-mybatis配置
pom.xml配置 <?xml version="1.0"?> <project xsi:schemaLocation="http://maven.ap ...
- Oracle第一步
Oracle 启动数据库 Startup [NOMOUNT|MOUNT|OPEN|FORCE] [restrict] [pfile=filename] 启动实例,加载数据库,启动数据库 oRACLE关 ...
- 从国内流程管理软件市场份额看中国BPM行业发展
随着互联网+.中国制造2025.工业4.0等国家战略的支持与引导,企业在数字经济时代的信息化表现惊人,越来越多企业认识到,对于企业的发展来说,信息自动化远远还不够,企业的战略.业务和IT之间需保持高度 ...
- Oracle 列数据聚合方法汇总
网上流传众多列数据聚合方法,现将各方法整理汇总,以做备忘. wm_concat 该方法来自wmsys下的wm_concat函数,属于Oracle内部函数,返回值类型varchar2,最大字符数4000 ...
- [译]DbContext API中使用SqlQuery和ExecuteSqlCommand获取存储过程的输入输出参数
水平有限,欢迎指正.原文:http://blogs.msdn.com/b/diego/archive/2012/01/10/how-to-execute-stored-procedures-sqlqu ...