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 ...
随机推荐
- 【WCF】使用“用户名/密码”验证的合理方法
我不敢说俺的方法是最佳方案,反正这世界上很多东西都是变动的,正像老子所说的——“反(返)者,道之动”.以往看到有些文章中说,为每个客户端安装证书嫌麻烦,就直接采用把用户名和密码塞在SOAP头中发送,然 ...
- MVC Core 网站开发(Ninesky) 2.1、栏目的前台显示
上次创建了栏目模型,这次主要做栏目的前台显示.涉及到数据存储层.业务逻辑层和Web层.用到了迁移,更新数据库和注入的一些内容. 一.添加数据存储层 1.添加Ninesky.DataLibrary(与上 ...
- 前端学HTTP之重定向和负载均衡
前面的话 HTTP并不是独自运行在网上的.很多协议都会在HTTP报文的传输过程中对其数据进行管理.HTTP只关心旅程的端点(发送者和接收者),但在包含有镜像服务器.Web代理和缓存的网络世界中,HTT ...
- Spring获取ApplicationContext
在Spring+Struts+Hibernate中,有时需要使用到Spring上下文.项目启动时,会自动根据applicationContext配置文件初始化上下文,可以使用ApplicationCo ...
- SharePoint 2013: A feature with ID has already been installed in this farm
使用Visual Studio 2013创建一个可视web 部件,当右击项目选择"部署"时报错: "Error occurred in deployment step ' ...
- git
CMD命令:git initgit add . [添加文件至暂存区]git commit -m '描述性语句 随意写即可'git branch gh-pages [创建仓库分支]git checkou ...
- Linux 利用Google Authenticator实现ssh登录双因素认证
1.介绍 双因素认证:双因素身份认证就是通过你所知道再加上你所能拥有的这二个要素组合到一起才能发挥作用的身份认证系统.双因素认证是一种采用时间同步技术的系统,采用了基于时间.事件和密钥三变量而产生的一 ...
- PHP 数组浅析
PHP的数组具有如下特点:1.数组初始化时无需指定长度:2.数组中的元素无需相同类型:3.数组的长度可变4.可使用var_dump(参数)或者print_r( 参数) 函数查看数组变量.5.数组内的 ...
- Python3中的字符串函数学习总结
这篇文章主要介绍了Python3中的字符串函数学习总结,本文讲解了格式化类方法.查找 & 替换类方法.拆分 & 组合类方法等内容,需要的朋友可以参考下. Sequence Types ...
- 电商系统中的商品模型的分析与设计—续
前言 在<电商系统中的商品模型的分析与设计>中,对电商系统商品模型有一个粗浅的描述,后来有博友对货品和商品的区别以及属性有一些疑问.我也对此做一些研究,再次简单的对商品模型做一个介 ...