多态性是面向对象的语言的一个主要特色,因为C++为了照顾C的原因,让其成为了一个不彻底的面向对象,而Java作为一门完全的面向对象语言,故而在多态性这点上有其独特的特色。本文就我自己对Java多态性的理解,谈了一些自己的看法,然后写了点代码表达一下。
总的来说,Java的多态性通过两种方式来表现,一种是静态,另一种是动态。假设现在有两个类,父类为Parent,子类为Child,两个类中都有方法func。
- class Parent {
- public void func(String str) {
- System.out.println("In the Parent's function ");
- }
- }
- class Child extends Parent {
- //覆盖父类的方法时
- public void func(String str) {
- System.out.println("In the Child's function, overriding ");
- }
- //重载父类的方法
- public void func() {
- System.out.println("In the Child's function, overloading");
- }
- }
class Parent { public void func(String str) { System.out.println("In the Parent's function "); } } class Child extends Parent { //覆盖父类的方法时 public void func(String str) { System.out.println("In the Child's function, overriding "); } //重载父类的方法 public void func() { System.out.println("In the Child's function, overloading"); } }
静态而言就是这样的,用一个父类的引用引用父类的一个对象,如Parent p = new Parent(); 再用子类的一个引用指向一个子类的对象,如 Child c = new Child(); 分别调用父类跟子类的方法时(通过p跟c)都是调用本身类中的方法。如执行p.func("Parent"); c.func("Child"); 时分别调用父类和子类中的方法。
对于动态而言,我个人觉得可以这样理解,因为动态调用要求在子类覆盖父类中对应的方法,也就是说,在子类中已经看不到父类中的那个方法了,调用时采用super.func(参数); 那么再调用该方法时就是调用子类的这个方法了。当然采用动态调用时必须得用一个父类的引用来引用一个子类的对象,如Parent p2 = new Child(); 才能调用子类中的方法,如果是父类的引用指向一个父类的对象,就会调用的是父类的方法,也就是说,要实现动态调用,必须得是一个父类的引用来引用一个子类或者父类的对象。
一直以来,我都觉得子类中不能同时存在两个同名方法,一个是对父类相应方法的overriding,一个对父类对应方法的overloading。但前天一写代码实现才发现这样是行得通的,下面是我写的代码跟相应的输出结果,个人表达能力有限,就不解释原因了。
<!---->class Parent {
public void func(String str) {
System.out.println( " In the Parent's function " );
}
}
class Child extends Parent {
// 覆盖父类的方法时
public void func(String str) {
System.out.println( " In the Child's function, overriding " );
}
// 重载父类的方法
public void func() {
System.out.println( " In the Child's function, overloading " );
}
}
public class OverrindAndOverload {
public static void main(String[] args) {
Parent p = new Parent();
p.func( " Parent " ); // In the Parent's function
Child c1 = new Child();
c1.func( " Child " ); // In the Child's function, overriding
Child c2 = new Child();
c2.func(); // In the Child's function, overloading
Parent dp = new Child();
dp.func( " who " ); // In the Child's function, overriding
}
}
- class Parent {
- public void func(String str) {
- System.out.println("In the Parent's function ");
- }
- }
- class Child extends Parent {
- //覆盖父类的方法时
- public void func(String str) {
- System.out.println("In the Child's function, overriding ");
- }
- //重载父类的方法
- public void func() {
- System.out.println("In the Child's function, overloading");
- }
- }
- public class OverrindAndOverload {
- public static void main(String[] args) {
- Parent p = new Parent();
- p.func("Parent"); //In the Parent's function
- Child c1 = new Child();
- c1.func("Child"); //In the Child's function, overriding
- Child c2 = new Child();
- c2.func(); //In the Child's function, overloading
- Parent dp = new Child();
- dp.func("who"); //In the Child's function, overriding
- }
- }
发表评论
-
nginx代理IIS轻松实现支持JSP,PHP,ASP平台
2012-05-12 21:16 1561通过使用高效代理服务器nginx代理IIS轻松实现支持JSP, ... -
OpenSessionInViewFilter的使用
2011-06-22 11:34 704一、作用 Spring为我们解决Hibernate的Sess ... -
tomcat服务器使用url rewrite1
2011-05-19 18:25 1430让tomcat服务器使用url rewrite1. 第 ... -
CountDownLatch闭锁详解
2011-05-09 10:29 1277闭锁(Latch) 闭锁(Latch):一种同步方法,可以延 ... -
memcache/memcached/memcachedb 配置、安装
2011-05-05 15:44 1165memcache/memcached/memcachedb ... -
jquery.treeview使用
2011-03-25 18:31 1492这几天项目中要用到树型结构,正好项目中用到了JQuery,所以 ... -
集群的可扩展性及其分布式体系结构
2011-03-17 14:54 1071常见的平衡算法 一般 ... -
strust2防止重复提交
2011-03-15 10:05 1077在请求表单中添加<s:token></s:t ... -
源码中没有任何错误目录中还存在红叉
2011-02-26 17:04 739查看.classpath文件。修改正确配置!lib与src -
长连接与短连接
2011-01-04 15:44 1090长连接与短连接 所谓长连接,指在一个TCP连接上可以连续发送 ... -
带“+”号的参数值通过url传递,后台取不到正确值
2010-11-29 15:19 2418带“+”号的参数值通过url传递,后台取不到正确值 问题是这样 ... -
JCom的使用
2010-11-08 11:15 2695JCom可以支持打印,支持生成word,生成Excel,并且可 ... -
利用java操作Excel文件
2010-10-28 16:45 709利用java操作Excel文件 很久以来都想 ... -
XSL将XML转换成HTML文件 js方法
2010-10-22 14:34 2978JavaScript解决方案XSL是如何将XML转换成HTML ... -
web.xml详解
2010-10-22 09:18 636部署描述符实际上是一个XML文件,包含了很多描述servlet ... -
jsvalidation表单验证框架使用相关问题
2010-10-05 18:57 10961、如果验证框架没有起作用,就先把验证框架的js文件、x ... -
java中调用c(c++)写的dll 文件的实现及步骤
2010-09-08 10:08 1681JNI使用技巧点滴本文为 ... -
我的站点
2010-01-09 10:43 0www.51sj.com 我要设计 www.52sj.co ... -
Oracle创建删除用户、角色、表空间、导入导出数据库命令行方式总结
2009-12-18 21:31 2308说明: 在创建数据库时输入的密码,是修改系统默认的密码,以sy ... -
jdbc连接各种数据库
2009-12-18 21:08 788一、jsp连接Oracle8/8i/9i数据库(用thin模式 ...
相关推荐
java中多态性的体现与使用 方法的重写
实验二:java多态性.rar实验二:java多态性.rar
Java多态性实验报告 1、编写一个名为“复数”的类,包含复数的实部和虚部(数据成员),以及复数之间的基本算术运算:加、减(方法成员),并要求复数加减运算,程序运行中能对给定的复数进行运算,并打印运算的结果....
Java多态性实验报告 1、编写一个名为“复数”的类,包含复数的实部和虚部(数据成员),以及复数之间的基本算术运算:加、减(方法成员),并要求复数加减运算,程序运行中能对给定的复数进行运算,并打印运算的结果...
关于java多态性和abstract修饰的使用 一个具体的实例 简单易懂
Java多态性探悉 .......推荐。、。
java多态性.pdf
Java多态性浅析.pdf
Java多态性的实现.pdf
编程语言java多态性.pdf
java多态性详解——父类引用子类对象
可以更清楚的了解java,帮助你认识java的多态性
Java多态性之隐式重载的应用分析.pdf
java多态性详解——父类引用子类对象.pdf
基于反射机制的数据流Java多态性实现及研究.pdf
java类和对象继承多态性 是JAVA的基础学习课件,有利于提高
Java 中的多态性是一个概念,我们可以通过它以不同的方式执行单个操作。多态性源自两个希腊词:poly 和 morphs。“poly”这个词意味着许多,“morphs”意味着形式。所以多态性意味着多种形式。
对于JAVA多态性的理解是非常好的帮助,多态性是JAVA中常用的性质
主要介绍了java 多态性详解及常见面试题的相关资料,这里对java 的多态性做了资料整理,并列举常见的关于多态性的面试题,需要的朋友可以参考下
这个代码实现了一个简单的动物园管理系统。首先定义了一个抽象类Animal,其中有一个抽象方法makeSound()。然后分别定义了Lion和Elephant两个子类,它们都继承了Animal类,并实现了makeSound()方法。...