java中多态的详解

  定义:指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用)

  多态的前提:

    A:有继承或者实现关系。

    B:有方法重写。

    C:有父类或者父接口引用指向子类对象。

  多态的分类:
    a:具体类多态
      class Fu {}
      class Zi extends Fu {}
      

      Fu f = new Zi();
    

    b:抽象类多态
      abstract class Fu {}
      class Zi extends Fu {}

      Fu f = new Zi();
      

    c:接口多态
      interface Fu {}
      class Zi implements Fu {}

      Fu f = new Zi();

  多态中的成员访问特点
    A:成员变量
      编译看左边,运行看左边
    B:构造方法
      子类的构造都会默认访问父类构造
    C:成员方法
      编译看左边,运行看右边
    D:静态方法
      编译看左边,运行看左边

  为什么?
    因为成员方法有重写。

  多态的好处:
    A:提高代码的维护性(继承体现)
    B:提高代码的扩展性(多态体现)

  多态的弊端:
    父不能使用子的特有功能。

  现象:
    子可以当作父使用,父不能当作子使用。

  多态中的转型
    A:向上转型
    从子到父

    B:向下转型
    从父到子

 1         class 孔子爹 {
 2         public int age = 40;
 3
 4         public void teach() {
 5             System.out.println("讲解JavaSE");
 6         }
 7     }
 8
 9     class 孔子 extends 孔子爹 {
10         public int age = 20;
11
12         public void teach() {
13             System.out.println("讲解论语");
14         }
15
16         public void playGame() {
17             System.out.println("英雄联盟");
18         }
19     }
20
21     //Java培训特别火,很多人来请孔子爹去讲课,这一天孔子爹被请走了
22     //但是还有人来请,就剩孔子在家,价格还挺高。孔子一想,我是不是可以考虑去呢?
23     //然后就穿上爹的衣服,带上爹的眼睛,粘上爹的胡子。就开始装爹
24     //向上转型
25     孔子爹 k爹 = new 孔子();
26     //到人家那里去了
27     System.out.println(k爹.age); //40
28     k爹.teach(); //讲解论语
29     //k爹.playGame(); //这是儿子才能做的
30
31
32     //讲完了,下班回家了
33     //脱下爹的装备,换上自己的装备
34     //向下转型
35     孔子 k = (孔子) k爹;
36     System.out.println(k.age); //20
37     k.teach(); //讲解论语
38     k.playGame(); //英雄联盟
39             
时间: 2024-08-29 21:15:39

java中多态的详解的相关文章

java中static作用详解

static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念. 被static修饰的成员变量和成员方法独立于该类的任何对象.也就是说,它不依赖类特定的实例,被类的所有实例共享. 只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们.因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象. 用public修饰的static成员变量和成员方法本质是全局变量和全局方法,当声明它类

Java中的HashTable详解

Hashtables提供了一个很有用的方法可以使应用程序的性能达到最佳. Hashtables(哈 希表)在计算机领域中已不 是一个新概念了.它们是用来加快计算机的处理速度的,用当今的标准来处理,速度非常慢,而它们可以让你在查询许多数据条目时,很快地找到一个特殊的条目. 尽管现代的机器速度已快了几千倍,但是为了得到应用程序的最佳性能,hashtables仍然是个很有用的方法. 设想一下,你有一个 包含约一千条记录的数据文件??比如一个小企业的客户记录还有一个程序,它把记录读到内存中进行处理.每个

Java中反射机制详解

序言 在学习java基础时,由于学的不扎实,讲的实用性不强,就觉得没用,很多重要的知识就那样一笔带过了,像这个马上要讲的反射机制一样,当时学的时候就忽略了,到后来学习的知识中,很多东西动不动就用反射,所以回过头来把这个给重新补一下,自己欠下的债,迟早是要还的. ---WH 一.什么是反射? 在运行状态中,对于任意一个类,都能够获取到这个类的所有属性和方法,对于任意一个对象,都能够调用它的任意一个方法和属性(包括私有的方法和属性),这种动态获取的信息以及动态调用对象的方法的功能就称为java语言的

Java中的final详解以及用途实战

浅析Java中的final关键字 谈到final关键字,想必很多人都不陌生,在使用匿名内部类的时候可能会经常用到final关键字.另外,Java中的String类就是一个final类,那么今天我们就来了解final这个关键字的用法.下面是本文的目录大纲: 一.final关键字的基本用法 二.深入理解final关键字 若有不正之处,请多多谅解并欢迎指正. 请尊重作者劳动成果,转载请标明原文链接: http://www.cnblogs.com/dolphin0520/p/3736238.html 一

Java 中的泛型详解-Java编程思想

Java中的泛型参考了C++的模板,Java的界限是Java泛型的局限. 2.简单泛型 促成泛型出现最引人注目的一个原因就是为了创造容器类. 首先看一个只能持有单个对象的类,这个类可以明确指定其持有的对象的类型 class Holder1 { private Circle a; public Holder1(Circle a) { this.a = a; } Circle get() { return a; } } 上面的类的可重用性不怎么样,无法持有其他类型的任何对象,下面通过持有Object

关于JAVA中形参的详解

在JAVA中形式参数主要有基本类型,类名,抽象类名,接口名.下面我们来各自讲述. 1.基本类型 这个太简单不做简述. 2.类名 类名:需要该类的对象 1 class Student { 2 public void study() { 3 System.out.println("Good Good Study,Day Day Up"); 4 } 5 } 6 7 class StudentDemo { 8 public void method(Student s) { //ss; ss =

Java中Class对象详解

java中把生成Class对象和实例对象弄混了,更何况生成Class对象和生成 instance都有多种方式.所以只有弄清其中的原理,才可以深入理解.首先要生成Class对象,然后再生成Instance.那Class对象的生 成方式有哪些呢,以及其中是如何秘密生成的呢? Class对象的生成方式如下: 1.Class.forName("类名字符串")  (注意:类名字符串必须是全称,包名+类名) 2.类名.class 3.实例对象.getClass() 通过一段小程序,来观察一下Cla

java中的static详解

如果一个类成员被声明为static,它就能够在类的任何对象创建之前被访问,而不必引用任何对象.static 成员的最常见的例子是main( ) .因为在程序开始执行时必须调用main() ,所以它被声明为static. 声明为static的变量实质上就是全局变量.当声明一个对象时,并不产生static变量的拷贝,而是该类所有的实例变量共用同一个static变量,例如:声明一个static的变量count作为new一个类实例的计数.声明为static的方法有以下几条限制: 1.它们仅能调用其他的s

Java中String类型详解

这篇博客是我一直想总结的,这两天一直比较忙,先上传下照片吧,过后有时间再弄成正常的. 本文主要是对Java中String类型的总结,包括其在JVM中是怎么存储的...