`

java基础_多态

阅读更多

    

 

 

在面向对象的程序设计语言中,多态是继数据抽象和继承之后的第三种基本特征。

多态出现的目的是消除类型之间的耦合关系。继承允许将对象视为它本身的类型或其基类型来加以处理,它允许将多种类型(从同一种类型继承下来的)视为同一种类型来处理,而同一份代码也就可以毫无差异的运行在这些不同的类型之上了。多态方法调用允许一种类型表现出与其他相似类型之间的区别(只要他们都是从同一基类继承下来的)

·转型

class Father {

    void fun() {

       System.out.println("Father fun()");

    }

}

class Child extends Father {

    //继承之后本来已经拥有了一个fun()的方法,覆盖了父类的fun()方法

    void fun() {

       System.out.println("Child fun()");

    }

}

 

public class PolymorphicTest {

   

    //传一个Father的引用进来,并且调用它的fun()方法

    public static void play(Father fa) {

       fa.fun();

    }

 

    public static void main(String[] args) {

 

       Child child = new Child();

       //本来应该传一个Father类型的引用进去,但这里传进去的是一个Child的引用

       //也是可以正常运行的,这就叫做:向上转型

       play(child);

       //~~输出:Child fun()

      

       //按照常规的用法是Father fa = new Father();

       //但这里去Father的引用指向了Child,由于Child是从Father继承下来的,

       //所以也是可以这样来new的,这就叫做:多态

       Father fa = new Child();

       play(fa);

       //~~也输出:Child fun()

    }

}

在以上例子中的PolymorphicTest类中的play方法里应该传入的是一个Father类型的引用,但是在main函数里调用play方法时却传入的是一个Child对象的引用,这样做之所以能正常运行是因为Child继承了Father

·多态例子

例子:现有一个People的对象,People分为kidyoungold三个阶段,每个阶段都有一个talk的方法说出自己所在的阶段,通过多态的方式来向上转型为People

class People {

    void talk() {

       System.out.println("I'm a People");

    }

}

class Kid extends People {

    void talk() {

       System.out.println("I'm a kid");

    }

}

class Young extends People {

    void talk() {

       System.out.println("I'm a young people");

    }

}

class Old extends People {

    void talk() {

       System.out.println("I'm a old people");

    }

}

public class PeopleTest {

   

    public static void play(People p) {

       p.talk();

    }

 

    public static void main(String[] args) {

       //定义一个People的引用指向People对象

       People people = new People();

       //定义一个People的引用指向Kid对象,多态

       People kid = new Kid();

       //定义一个People的引用指向Young对象,多态

       People young = new Young();

       //定义一个People的引用指向Old对象,多态

       People old = new Old();

      

       play(people);

       //~~输出:I'm a People

       play(kid);

       //~~输出:I'm a kid

       play(young);

       //~~输出:I'm a young people

       play(old);

       //~~输出:I'm a old people

    }

}

·域与静态方法及初始化

class Base {

    public Base() {

       System.out.println("Base Object is constructor");

    }

    public static String staticGet() {

       return "Base staticGet";

    }

    public String dynamicGet() {

       return "Base dynamicGet";

    }

}

class Sub extends Base {

    public Sub() {

       System.out.println("Sub Object is constructor");

    }

    public static String staticGet() {

       return "Sub staticGet";

    }

    public String dynamicGet() {

       return "Sub dynamicGet";

    }

}

public class FieldTest {

 

    public static void main(String[] args) {

 

       //向上转型

       //在这里构造一个Base的对象来指向它的子类Sub

       //注意:在构造子类先构造父类

       Base base = new Sub();

      

       System.out.println(base.staticGet());

       //~~输出:Base staticGet

       System.out.println(base.dynamicGet());

       //~~输出:Sub dynamicGet

    }

}

注意以上例子的输出结果。虽然进行了相应的转型,但在调用static静态方法时还是调用的父类的。在构造子类之前先构造其父类。

 源代码及相应的work文档在下面的附件中

0
0
分享到:
评论

相关推荐

    Java_ploymorphism.rar_ploymorphi_多态

    当我们使用Object类型的变量时,实际上可以存储任何类型的对象,这展示了Java的多态特性。我们可以调用Object类提供的方法(如equals()、toString()等),这些方法会被子类重写,从而展现出不同的行为。 3. **...

    Java基础之多态ppt

    Java基础之多态课程PPT适用于基础学习者使用,很好的课程资源

    动力节点_Java基础视频教程57_多态面试

    动力节点的Java课程适合绝对零基础的观看,教程中讲解了Java开发环境搭建、Java的基础...适合非计算机专业,想转行做Java开发的朋友,或者想让Java基础更扎实的小伙伴,配套资料下载:http://www.bjpowernode.com/?csdn

    动力节点_Java基础视频教程55_多态概念

    动力节点的Java课程适合绝对零基础的观看,教程中讲解了Java开发环境搭建、Java的基础...适合非计算机专业,想转行做Java开发的朋友,或者想让Java基础更扎实的小伙伴,配套资料下载:http://www.bjpowernode.com/?csdn

    动力节点_Java基础视频教程58_多态的作用

    动力节点的Java课程适合绝对零基础的观看,教程中讲解了Java开发环境搭建、Java的基础...适合非计算机专业,想转行做Java开发的朋友,或者想让Java基础更扎实的小伙伴,配套资料下载:http://www.bjpowernode.com/?csdn

    java基础-java多态详解

    Java 多态详解 Java 多态是 Java 编程语言中的一种基本概念,它允许开发者定义一个接口,并且可以通过不同的类来实现该接口。多态性是 Java 面向对象编程的核心机制之一,它使得程序更加灵活、可维护和可扩展。 ...

    Java基础——多态.pdf

    内含Java基础多态知识点笔记,及部分对应练习题。

    Java基础视频 多态 初学者 基础

    非常好的Java基础视频,帮助你掌握Java基础知识 视频很清晰

    java继承、多态的简单程序.zip

    Java编程语言是面向对象的,其中继承和多态是核心概念。这个压缩包"java继承、多态的简单程序.zip"显然包含了一些示例代码,旨在帮助初学者理解这两个概念。接下来,我们将深入探讨Java中的继承和多态性。 ### 继承...

    java基础继承封装多态

    本资源摘要信息将对 Java 基础知识点进行总结,涵盖继承、封装、多态等概念,并对面向对象的设计、数据库设计模式等进行讲解。 继承 继承是 Java 中的一种机制,允许一个类继承另一个类的属性和方法。继承的语法是...

    Java基础多态PPT教学课件.pptx

    Java基础多态PPT教学课件.pptx

    Java基础_day01

    "Java基础_day01"的学习内容通常涵盖了Java编程的基础概念,是初学者入门的关键步骤。以下是一些重要的Java基础知识,这些内容可能会在学习过程中涉及: 1. **环境配置**:学习Java的第一步是安装JDK(Java ...

    java继承与多态

    ### Java继承与多态知识点详解 #### 一、引言 在面向对象编程语言中,继承和多态是非常重要的概念。它们提供了强大的机制来管理代码的复杂性,并且能够有效地复用现有代码。本文将详细介绍Java中的继承和多态概念...

    JiSuanQi.rar_java多态计算器

    在本项目"JiSuanQi.rar_java多态计算器"中,开发者利用Java的多态性来实现一个计算器,同时结合了properties属性表来处理国际化和配置文件,这为程序的可扩展性和灵活性提供了良好的基础。 首先,让我们详细了解...

    Java零基础-多态.md

    ### Java零基础-多态 #### 内容概要 本文旨在深入浅出地介绍Java中的多态(Polymorphism)这一核心概念及其具体应用。读者不仅能够理解多态的基本含义,还能掌握如何在实际编程中运用多态,提高代码的灵活性和可...

    java_basic_examinations.rar_java pdf_java基础

    "java_basic_examinations.rar_java pdf_java基础" 提供的资源是针对初学者的Java基础练习题,共计200题,以PDF文档的形式呈现。这份资料对于想要深入理解和掌握Java语言的人来说是非常宝贵的。 首先,让我们探讨...

    动力节点_Java基础视频教程66_接口多态

    动力节点的Java课程适合绝对零基础的观看,教程中讲解了Java开发环境搭建、Java的基础...适合非计算机专业,想转行做Java开发的朋友,或者想让Java基础更扎实的小伙伴,配套资料下载:http://www.bjpowernode.com/?csdn

    详解java接口、继承和多态

    ### 详解Java接口、继承和多态 ...综上所述,Java中的接口、继承和多态是面向对象编程中非常重要的概念,它们为构建灵活、可扩展的系统提供了基础。理解和熟练掌握这些概念对于成为一名优秀的Java开发者至关重要。

Global site tag (gtag.js) - Google Analytics