多 态
在面向对象的程序设计语言中,多态是继数据抽象和继承之后的第三种基本特征。
多态出现的目的是消除类型之间的耦合关系。继承允许将对象视为它本身的类型或其基类型来加以处理,它允许将多种类型(从同一种类型继承下来的)视为同一种类型来处理,而同一份代码也就可以毫无差异的运行在这些不同的类型之上了。多态方法调用允许一种类型表现出与其他相似类型之间的区别(只要他们都是从同一基类继承下来的)。
·转型
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分为kid、young、old三个阶段,每个阶段都有一个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文档在下面的附件中
分享到:
相关推荐
当我们使用Object类型的变量时,实际上可以存储任何类型的对象,这展示了Java的多态特性。我们可以调用Object类提供的方法(如equals()、toString()等),这些方法会被子类重写,从而展现出不同的行为。 3. **...
Java基础之多态课程PPT适用于基础学习者使用,很好的课程资源
动力节点的Java课程适合绝对零基础的观看,教程中讲解了Java开发环境搭建、Java的基础...适合非计算机专业,想转行做Java开发的朋友,或者想让Java基础更扎实的小伙伴,配套资料下载:http://www.bjpowernode.com/?csdn
动力节点的Java课程适合绝对零基础的观看,教程中讲解了Java开发环境搭建、Java的基础...适合非计算机专业,想转行做Java开发的朋友,或者想让Java基础更扎实的小伙伴,配套资料下载:http://www.bjpowernode.com/?csdn
动力节点的Java课程适合绝对零基础的观看,教程中讲解了Java开发环境搭建、Java的基础...适合非计算机专业,想转行做Java开发的朋友,或者想让Java基础更扎实的小伙伴,配套资料下载:http://www.bjpowernode.com/?csdn
Java 多态详解 Java 多态是 Java 编程语言中的一种基本概念,它允许开发者定义一个接口,并且可以通过不同的类来实现该接口。多态性是 Java 面向对象编程的核心机制之一,它使得程序更加灵活、可维护和可扩展。 ...
内含Java基础多态知识点笔记,及部分对应练习题。
非常好的Java基础视频,帮助你掌握Java基础知识 视频很清晰
Java中的多态是面向对象编程的关键特性之一,它允许一个接口或者抽象方法被多个不同的类实现,从而使得代码更加灵活且可扩展。多态的概念基于一个接口可以有多种不同的实现方式,增强了程序的多样性和适应性。 在...
Java编程语言是面向对象的,其中继承和多态是核心概念。这个压缩包"java继承、多态的简单程序.zip"显然包含了一些示例代码,旨在帮助初学者理解这两个概念。接下来,我们将深入探讨Java中的继承和多态性。 ### 继承...
本资源摘要信息将对 Java 基础知识点进行总结,涵盖继承、封装、多态等概念,并对面向对象的设计、数据库设计模式等进行讲解。 继承 继承是 Java 中的一种机制,允许一个类继承另一个类的属性和方法。继承的语法是...
Java基础多态PPT教学课件.pptx
"Java基础_day01"的学习内容通常涵盖了Java编程的基础概念,是初学者入门的关键步骤。以下是一些重要的Java基础知识,这些内容可能会在学习过程中涉及: 1. **环境配置**:学习Java的第一步是安装JDK(Java ...
### Java继承与多态知识点详解 #### 一、引言 在面向对象编程语言中,继承和多态是非常重要的概念。它们提供了强大的机制来管理代码的复杂性,并且能够有效地复用现有代码。本文将详细介绍Java中的继承和多态概念...
在本项目"JiSuanQi.rar_java多态计算器"中,开发者利用Java的多态性来实现一个计算器,同时结合了properties属性表来处理国际化和配置文件,这为程序的可扩展性和灵活性提供了良好的基础。 首先,让我们详细了解...
### Java零基础-多态 #### 内容概要 本文旨在深入浅出地介绍Java中的多态(Polymorphism)这一核心概念及其具体应用。读者不仅能够理解多态的基本含义,还能掌握如何在实际编程中运用多态,提高代码的灵活性和可...
"java_basic_examinations.rar_java pdf_java基础" 提供的资源是针对初学者的Java基础练习题,共计200题,以PDF文档的形式呈现。这份资料对于想要深入理解和掌握Java语言的人来说是非常宝贵的。 首先,让我们探讨...
动力节点的Java课程适合绝对零基础的观看,教程中讲解了Java开发环境搭建、Java的基础...适合非计算机专业,想转行做Java开发的朋友,或者想让Java基础更扎实的小伙伴,配套资料下载:http://www.bjpowernode.com/?csdn