首页 > 其他分享 >面向对象特征三:多态性

面向对象特征三:多态性

时间:2023-05-13 09:34:40浏览次数:38  
标签:Person 特征 多态性 void 面向对象 子类 println 父类 public

对象的多态性

多态性,是面向对象中最重要的概念,在Java中的体现:对象的多态性:父类的引用指向子类的对象

格式:(父类类型:指子类继承的父类类型,或者实现的接口类型)

父类类型 变量名 = 子类对象;

举例

Person p = new Student();
Object o = new Person();//Object类型的变量o,指向Person类型的对象
o = new Student(); //Object类型的变量o,指向Student类型的对象

对象的多态:在Java中,子类的对象可以替代父类的对象使用。所以,一个引用类型变量可能指向(引用)多种不同类型的对象

多态的理解

Java引用变量有两个类型:编译时类型和运行时类型。编译时类型由声明该变量时使用的类型决定,运行时类型由实际赋给该变量的对象决定。简称:编译时,看左边;运行时,看右边。

  • 若编译时类型和运行时类型不一致,就出现了对象的多态性(P从
  • 多态情况下,“看左边”:看的是父类的引用(父类中不具备子类特有的方法)  “看右边”:看的是子类的对象(实际运行的是子类重写父类的方法)

多态的使用前提:① 类的继承关系 ② 方法的重写

多态示例

public class Person {
    private String name;
    private int age;

    int id = 0;
    
    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 Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public Person() {
    }

    public void eat(){
        System.out.println("人吃饭");
    }

    public void  walk(){
        System.out.println("人走路");
    }
}

创建子类继承Person

public class Man extends Person {
    boolean isSmoking;
    int id = 1;
    public void eat(){
        System.out.println("男孩子爱吃肉");
    }

    public void  walk(){
        System.out.println("男人走路快");
    }

    public static void main(String[] args) {
        System.out.println("1");
    }

    public void earnMoney(){
        System.out.println("男人挣钱养家");
    }
}
public class Women extends Person {
    boolean isBeauty;
    public void eat(){
        System.out.println("女人少吃减肥");
    }

    public void  walk(){
        System.out.println("走路好看");
    }

    public void shopping(){
        System.out.println("女孩喜欢逛街");
    }
}

测试类

    public static void main(String[] args) {
        //之前构造对象
        Person person = new Person();
        Man man = new Man();
        //多态
        Person p1 = new Man();

        /**
         * 虚拟调用:多态调用:编译时认为调用父类方法,实际执行的是子类中重写的方法
         * 编译看左边,执行看右边
         */
        p1.eat();
        p1.walk();
        //多态适用于 方法,不适用于属性
        System.out.println(p1.id);//直接打印了 父类中的ID

    }

多态特点

好处:变量引用的子类对象不同,执行的方法就不同,实现动态绑定。代码编写更灵活、功能更强大,可维护性和扩展性更好了。

弊端:一个引用类型变量如果声明为父类的类型,但实际引用的是子类对象,那么该变量就不能再访问子类中添加的属性和方法。

标签:Person,特征,多态性,void,面向对象,子类,println,父类,public
From: https://www.cnblogs.com/wdh01/p/17323343.html

相关文章

  • m基于HOG特征提取和GA优化GRNN网络的交通标志检测和识别算法matlab仿真
    1.算法仿真效果matlab2022a仿真结果如下:       2.算法涉及理论知识概要2.1遗传算法       遗传算法GA把问题的解表示成“染色体”,在算法中也即是以二进制编码的串。并且,在执行遗传算法之前,给出一群“染色体”,也即是假设解。然后,把这些假设解置于......
  • 使用幂法求解矩阵的最大特征值及对应的特征向量
    使用幂法求解矩阵的最大特征值及对应的特征向量幂法简介幂法(PowerMethod)是一种迭代算法,主要用于求解矩阵的最大特征值及其对应的特征向量。这种方法特别适合于求解大型稀疏矩阵的最大特征值和特征向量。其主要步骤包括:选择一个初始向量\(v^{(0)}\)。迭代计算\(v^{(k+1)}=......
  • 连续特征的embeding
    目前常见的连续特征处理可以概括为三种:NoEmbedding、FieldEmbedding、Descretization。接下来将为大家一一介绍。   之前离散化的不足尽管离散化在工业界广泛引用,但仍然有以下三方面的缺点:TPP(Two-Phase Problem):将特征分桶的过程一般使用启发式的规则(如EDD、EFD)或......
  • Java面向对象
    面向对象编程(OOP)是软件开发的一种新方法,使用这种方法开发的软件具有易维护、可重用和可扩展性等特性。【特征:封装、继承、多态(抽象)】面向对象基本概念:(面向对象的设计就是一个抽象的过程)1、对象:对象就是用来描述客观事物的一个实体。用面向对象的方法解决问题,需要对现实世界中的......
  • JavaScript 面向对象编程
    面向对象编程ObjectOrientedProgramming面向对象编程用对象把数据和方法聚合起来。面向对象编程的优点能写出模块化的代码能使得代码更灵活能提高代码的可重用性面向对象编程的原则继承(inheritance):子类/派生类从父类/基类/超类中派生,形成继承结构封装(encapsulati......
  • python基础学习-面向对象
     Python-Core-50-Courses/第17课:面向对象编程入门.mdatmaster·jackfrued/Python-Core-50-Courses(github.com)Python-Core-50-Courses/第18课:面向对象编程进阶.mdatmaster·jackfrued/Python-Core-50-Courses(github.com)......
  • JAVA学习笔记随记3(面向对象高级)
    类变量类变量的内存布局目前对于类变量的内存布局不能一概而论。对于jdk8及其之前的版本,类变量放在方法区的静态域中。对于之后版本的jdk而言,类变量放在堆区。但实例化出的对象,类变量都是通过引用的。无论如何有以下两个公示:1.静态对象被所有对象共享。2.static类变量,在......
  • 第五节:面向对象
    三个特征:封装,继承,多态。开发:找对象,没有对象就创建对象,使用对象,维护对象。类:对现实生活中事物的描述对象:实实在在存在的个体。对象就是在堆内存中用new建立的实体,实体就是用来存储多个数据的,对象有很多个实体,比如年龄,性别,姓名等。凡是用来存储多个数据的我们都叫做实体。定义......
  • 编程打卡:面向对象程序设计测试
    面向对象程序设计测试#include<iostream>#include<iomanip>usingnamespacestd;classPoint{protected:doublex,y;public:Point(doublea=0,doubleb=0):x(a),y(b){cout<<"Pointconstructorcalled\n";......
  • CPT204面向对象编程指南
    AdvancedObject-OrientedProgrammingCPT204–FinalProjectCPT204AdvancedObject-OrientedProgrammingFinalProjectTaskSheet2–SupplementaryCPT204-2223FinalProjectTaskSheet2–SupplementaryInfo●Thisdocumentcontainssupplementaryinformationon......