Java中多态的理解

----------------------------------

最近在学习Java,接触了

多态的概念,用了好久才

搞懂,来给大家分享一下

博主的想法;

----------------------------------

多态,就是指一个对象在

不同时候体现出来的不同

状态;

----------------------------------

多态的实现要有3个前提:

  1.要有继承关系;

  2.要有方法重写;

  3父类引用指向子类对象;

    即 父 f = new 子();

----------------------------------

多态的成员访问特点:

  1.成员变量:

    编译看左边,运行看左边;

  2.静态成员变量:

    覆盖父类的值;

  3.构造方法:

    创建子类对象的时候,访问父类的构造方法,对父类的数据初始化;

  4.成员方法:

    编译看左边,运行看右边;(即父类和子类都有该方法,否则就报错,运行时是调用用子类的方法)

  5.静态成员方法:

    编译看左边,运行看左边;

----------------------------------

总结:

  只有重写后才会使用子类

  的方法;静态方法与类有

  关(通过类名加“.”访问)

  ,算不上重写,所以父类的

  静态方法不会被覆盖;成

  员变量和静态成员变量不

  存在重写,所以不会被覆盖;

  所以只有成员方法才会调

  用子类的方法。

----------------------------------

下面给出一个实例来说明:

 1 public class DuoTai {
 2     public static void main(String[] args) {
 3
 4         Fu f = new Zi();//fu,zi         //这里是多态
 5         System.out.println(f.num);      //100(fu的值)
 6         System.out.println(f.a);        //300(fu的值)
 7         //System.out.println(f.b);      //不能访问子类独有(父类没有)的成员变量;ERROR
 8         f.method();        //child      //动态成员方法
 9         f.fun();        //Fu            //静态成员方法
10         System.out.println();
11
12         Zi z = new Zi();//fu,zi      //这里是普通的对象创建方法
13         System.out.println(z.num);      //200(zi的值)
14         System.out.println(z.a);        //400(zi的值)
15         System.out.println(z.zi);       //500
16         z.method();        //child
17         z.fun();        //Zi
18         System.out.println();
19
20         Fu m = new Fu();//zi        //这里是普通的对象创建方法
21         System.out.println(m.num);      //100(fu的值)
22         System.out.println(m.a);        //300(fu的值)
23         m.method();        //father
24         m.fun();        //Fu
25     }
26 }
27 class Fu{
28     public int num = 100;     //fu的成员变量
29     public static int a = 300;  //fu的静态成员变量
30     public Fu(){           //fu的构造方法
31         System.out.println("fu");
32     }
33     public void method(){     //fu的成员方法
34         System.out.println("father");
35     }
36     public static void fun(){   //fu的静态成员方法
37         System.out.println("Fu");
38     }
39 }
40 class Zi extends Fu{
41     public int num = 200;      //zi的成员变量
42     public static int a = 400;   //zi的静态成员变量
43     public int b = 500;       //zi的成员变量(独有的)
44     public Zi(){           //zi的构造方法
45         System.out.println("zi");
46     }
47     public void method(){     //zi的成员方法
48         System.out.println("child");
49     }
50     public static void fun(){   //zi的静态成员方法
51         System.out.println("Zi");
52     }
53 }

------------------------------

上面就是我对多态的理

解,如有错误,欢迎大

家指正;感谢阅读;

------------------------------

时间: 2024-08-26 03:22:54

Java中多态的理解的相关文章

Java中多态的一些简单理解

什么是多态 1.面向对象的三大特性:封装.继承.多态.从一定角度来看,封装和继承几乎都是为多态而准备的.这是我们最后一个概念,也是最重要的知识点. 2.多态的定义:指允许不同类的对象对同一消息做出响应.即同一消息可以根据发送对象的不同而采用多种不同的行为方式.(发送消息就是函数调用) 3.实现多态的技术称为:动态绑定(dynamic binding),是指在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法. 4.多态的作用:消除类型之间的耦合关系. 5.现实中,关于多态的例子不

个人对Java中多态的一些简单理解

什么是多态 面向对象的三大特性:封装.继承.多态.从一定角度来看,封装和继承几乎都是为多态而准备的.这是我们最后一个概念,也是最重要的知识点. 多态的定义:指允许不同类的对象对同一消息做出响应.即同一消息可以根据发送对象的不同而采用多种不同的行为方式.(发送消息就是函数调用) 实现多态的技术称为:动态绑定(dynamic binding),是指在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法. 多态的作用:消除类型之间的耦合关系. 现实中,关于多态的例子不胜枚举. 下面是多态

从虚拟机指令执行的角度分析JAVA中多态的实现原理

从虚拟机指令执行的角度分析JAVA中多态的实现原理 前几天突然被一个"家伙"问了几个问题,其中一个是:JAVA中的多态的实现原理是什么? 我一想,这肯定不是从语法的角度来阐释多态吧,隐隐约约地记得是与Class文件格式中的方法表有关,但是不知道虚拟机在执行的时候,是如何选择正确的方法来执行的了.so,趁着周末,把压箱底的<深入理解Java虚拟机>拿出来,重新看了下第6.7.8章中的内容,梳理一下:从我们用开发工具(Intellij 或者Eclipse)写的 .java 源程

畅销书对Java中Iterator的理解误区

声明:本博客为原创博客,未经允许,不得转载!原文链接为http://blog.csdn.net/bettarwang/article/details/28110615 最近放假,闲来无事,便翻看以前看过的一些书,竟然发现有些书本(甚至是一些畅销书)对Java中Iterator有很大的误解,比如某畅销书在Collection那一章有这么一句话:"当使用Iterator对集合元素进行迭代时,Iterator并不是把集合元素本身传给了迭代变量,而是把集合元素的值传给了迭代变量,所以修改迭代变量的值对集

谈谈我对Java中CallBack的理解

谈谈我对Java中CallBack的理解 http://www.cnblogs.com/codingmyworld/archive/2011/07/22/2113514.html CallBack是回调的意思,熟悉Windows编程的人对"回调函数"这四个字一定不会陌生,但是Java程序员对它可能就不太了解了."回调函数"或者"回调方法"是软件设计与开发中一个非常重要的概念,掌握"回调函数"的思想对程序员来说(不管用哪种语言)

沉淀再出发:关于java中的AQS理解

沉淀再出发:关于java中的AQS理解 一.前言 在java中有很多锁结构都继承自AQS(AbstractQueuedSynchronizer)这个抽象类如果我们仔细了解可以发现AQS的作用是非常大的,但是AQS的底层其实也是使用了大量的CAS,因此我们可以看到CAS的重要性了,但是CAS也是有缺陷的,但是在大部分使用的情况下,我们往往忽略了这种缺陷. 二.AQS的认识 2.1.AQS的基本概念 AQS(AbstractQueuedSynchronizer)就是抽象的队列式的同步器,AQS定义了

Java中String的理解

Java中String的理解 最近在读String的源码,看了些String的文章,自己对String作了下总结记录下来. 1.String为什么是不可变的? String是final类,不可继承,其方法也不可被覆盖,避免从子类操纵父类属性:String的值保存在private final char[]数组中,本质是一个字符数组,私有则外部不可访问和修改,final引用则引用(或说引用的值)不变.引用可以简单地认为是堆上对象的首地址.String内部的private int hash,缓存has

深入Java核心 Java中多态的实现机制(1)

多态性是Java面向对象的一个重要机制,本文将向您详细介绍Java语言中多态性的实现原理和方法,通过多态一点带出更多Java面向对象有趣而实用的知识. 多态性是面向对象程序设计代码重用的一个重要机制,我们曾不只一次的提到Java多态性.在Java运行时多态性:继承和接口的实现一文中,我们曾详细介绍了Java实现运行时多态性的动态方法调度:今天我们再次深入Java核心,一起学习Java中多态性的实现. “polymorphism(多态)”一词来自希腊语,意为“多种形式”.多数Java程序员把多态看

对面向对象中多态的理解

原文:http://www.cnblogs.com/xrq730/p/4820237.html 概述 我们都知道面向对象有四个基本特性:抽象.封装.继承.多态.这四个特性,概括起来可以这么理解,抽象.封装.继承是多态的基础,多态是抽象.封装.继承的表现.多态,是Java中非常重要的一个部分,所以今天来谈一下多态(Polymorphism). 什么是多态 不同类的对象对同一消息作出不同的响应就叫做多态.就像上课铃响了,上体育课的学生跑到操场上站好,上语文课的学生在教室里坐好一样. 多态的作用 简单