1.首先建立一个父类Person:
package com.atguigu.java_duotai; public class Person { private String name; private int age; public Person() { super(); } public Person(String name, int age) { super(); this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public void walk() { System.out.println("人走路"); } public void eat() { System.out.println("人吃饭"); } }
2.再建立一个子类Man
package com.atguigu.java_duotai; public class Man extends Person { private boolean smoking; public Man() { super(); } public Man(boolean smoking) { super(); this.smoking = smoking; } public boolean isSmoking() { return smoking; } public void setSmoking(boolean smoking) { this.smoking = smoking; } public void walk() { System.out.println("男人走路"); } public void eat() { System.out.println("男人吃饭"); } public void entertainment(){ System.out.println("男人请客"); } }
3.再建一个子类Woman:
package com.atguigu.java_duotai; public class Woman extends Person { private boolean isBeauty; public Woman() { super(); } public Woman(boolean isBeauty) { super(); this.isBeauty = isBeauty; } public boolean isBeauty() { return isBeauty; } public void setBeauty(boolean isBeauty) { this.isBeauty = isBeauty; } public void walk() { System.out.println("女人走路"); } public void eat() { System.out.println("女人吃饭"); } public void shopping(){ System.out.println("女人购物"); } }
4.新建一个测试类TestPerson:
package com.atguigu.java_duotai; /* * 特征三:多态性 * 1.可以理解为一个事物的多种表现形式 * >方法的重载与重写 * >子类对象的多态性 * * 2.子类对象的多态性使用的前提: * >要有类的继承 * >要有子类对父类方法的重写 * * 3.程序运行分为编译状态和运行状态 * 对于多态性来说,编译时,“看左边”,将此引用变量理解为父类的类型 * 运行时,“看右边”,关注真正对象的实体:子类的对象。那么执行的方法就是子类重写的。 * * 4.属性不具有多态性(重名的话只看"左边") */ public class TestPerson { public static void main(String[] args) { Person p = new Person(); p.eat(); p.walk(); Man m = new Man(); m.eat(); m.walk(); m.entertainment(); // 子类对象的多态性:父类的引用指向子类对象 Person p1 = new Man();// 向上转型 // 虚拟方法调用:通过父类的引用指向子类的对象实体,当调用方法时实际执行的是子类重写父类的 p1.eat(); p1.walk(); // p1.entertainment(); Person p2 = new Woman(); p2.eat(); p2.walk(); // p2.shopping(); Woman w = (Woman) p2;// 向下转型,使用强转符() w.shopping(); // 编译时没错,运行时java.lang.ClassCastException // Woman w1 = (Woman)p1; // w1.shopping(); // instanceof: // 格式:对象a instanceof 类A :判断对象a是否是类A的实例 // 是的话返回true否false,是的话也一定是A类的父类的实例 if (p1 instanceof Woman) { System.out.println("dddddd"); Woman w1 = (Woman) p1; w1.shopping(); } if (p1 instanceof Man) { System.out.println("ffffff"); Man m1 = (Man) p1; m1.entertainment(); } if (p1 instanceof Person) { System.out.println("hhhhhhh"); } } }
5.运行结果:
男人吃饭 男人走路 女人吃饭 女人走路 女人购物 ffffff 男人请客 hhhhhhh
相关推荐
在这个实例中,我们将深入探讨如何通过基类构造函数来实现多态性,并理解其工作原理。 首先,让我们了解什么是构造函数。在C#中,构造函数是一种特殊的方法,用于初始化新创建的对象。当我们创建一个类的实例时,...
以下是一个简单的多态性示例,展示了如何使用抽象类和接口实现多态性: ```php interface Person { public function acceptFeedback(string $comment, string $source); } abstract class BasePerson { abstract...
重载函数是多态性的简单形式,即在同一作用域内,函数名相同但参数列表不同的一组函数。 静态联编(Static Binding)是编译时确定函数调用的过程,它发生在编译阶段,根据函数签名和上下文信息来确定调用哪个函数。...
这个简单的例子展示了如何在C++中利用多态性实现动态绑定,从而达到代码复用的目的。通过这种方式,我们可以在不修改现有代码的情况下轻松地添加新的糕点类型,只需继承`Pastry`类并实现相应的虚函数即可。 总之,...
这种方式也支持多态性,因为通过接口类型的引用可以调用任何实现了该接口的类的实例。例如: ```csharp interface IMyInterface { void Who(); } class MyClass1 : IMyInterface { public void Who() { Console...
在编程领域,类的多态性是面向对象编程的一个核心概念,它允许不同的对象对同一消息作出不同的响应。多态性使得代码更加灵活,可扩展性更强,是提高软件复用性和可维护性的重要手段。在C++或Java等支持面向对象的...
本实验将通过编写具体的Java代码来演示多态性的特性,特别是私有方法、静态方法和实例方法的多态性差异。 #### 实验步骤解析 ##### 步骤三:多态性实验 1. **私有方法和静态方法不是多态的**:这是因为在继承关系...
Java中的多态性是面向对象编程的一个核心概念,它允许我们以一种统一的方式来处理不同的对象,使得代码更加灵活、可扩展且易于维护。多态性是封装和继承的自然延伸,是面向对象设计的重要特征之一。 1. **多态的...
### C++语言中的多态性详解 #### 一、引言 C++作为一种强大的面向对象编程语言,提供了多种机制来支持面向对象编程的核心概念之一——多态性。多态性是指一个接口可以有多种实现方式的能力。在C++中,多态可以通过...
面向对象编程中的继承和多态性是两个核心概念,它们极大地增强了代码的复用性和灵活性。在本PPT学习教案中,我们将深入探讨这两个概念。 首先,我们来看类的继承。继承是面向对象编程的一个重要特性,允许一个类...
### 继承与多态性 实验五实验报告(面向对象程序设计) #### 一、继承的概念 在面向对象编程中,继承是一种重要的机制,它允许我们定义一个类(称为子类或派生类)来继承另一个类(称为父类或基类)的属性和方法。...
"Java语言的类和多态性的公理语义.pdf" Java语言的类和多态性的公理语义是计算机科学领域中一个重要的研究方向。随着计算机技术的发展,计算机语言的编写和公理语义的研究变得越来越重要。 形式化方法是研究计算机...
### 使用Java多态性实现一个简单的动物园管理系统的知识点解析 #### 一、抽象类与抽象方法 本系统中,`Animal`被定义为一个抽象类,这意味着它不能被实例化,仅能作为其他类的基础来扩展。抽象类的存在主要是为了...
10. **ch6**: 可能讲解了多态性,这是面向对象编程的一个核心概念,允许父类引用指向子类对象,增强了代码的灵活性和重用性。 通过研究这些章节的源代码,学习者可以深入理解每个知识点的实际应用,并通过实践来...
在这个例子中,Student类继承了Person类并添加了一个grade属性,同时重写了introduce方法以展示多态性。 Java还提供了丰富的类库,如集合框架(ArrayList、LinkedList等)、IO流、网络编程、多线程等。例如,集合...
在 Java 中,多态性是通过继承和重写来实现的。下面是 Java 多态实例代码的详细解释: 一、多态性的定义 多态性是同一个行为具有多个不同表现形式或形态的能力。在 Java 中,多态性是通过继承和重写来实现的。多态...
7. **多态**:多态性允许不同的对象对同一消息作出不同的响应,增强了程序的灵活性。实例将演示接口和抽象类在实现多态中的应用。 8. **接口**:接口是一种定义行为的方式,它规定了实现接口的类必须提供哪些方法。...
这种组件简单易用,适合实现简单的功能。接口定义了组件对外暴露的方法和属性,通过接口,客户端代码可以调用组件的方法,实现特定的功能。 5. **多接口COM组件**: 相较于单接口,多接口COM组件可以提供多个接口...
初学者可以通过实例理解如何设计和使用类,如何通过对象进行交互,以及如何利用多态性实现代码复用。 3. **异常处理**:Java提供了强大的异常处理机制,这些实例会展示如何使用try-catch-finally语句块来捕获和处理...
本文将深入探讨Java中的上转型对象如何体现多态性,并进一步分析面向对象的设计原则。 ### 多态的概念 多态(Polymorphism)是指一个接口可以被多个类实现,或者一个抽象类可以有多个子类继承,并且这些子类可以...