Java中多态的概述、成员访问特点、好处弊端及多态的转型

简介: 多态的概述、成员访问特点、好处弊端及多态的转型的简单示例

 一、多态的概述

什么是多态:

同一个对象,在不同时刻表现出来的不同形态

多态的前提:

要有继承或实现关系

要有方法的重写

要有父类引用指向子类对象

二、多态中的成员访问特点

成员访问特点:

成员变量

       编译看父类,运行看父类

成员方法

       编译看父类,运行看子类

代码演示:

动物类

public class Animal { 
    public int age = 40; 
        public void eat() { 
            System.out.println("动物吃东西"); 
    } 
}

image.gif

猪类

public class Cat extends Animal { 
    public int age = 20; 
    public int weight = 10; 
    @Override 
    public void eat() { 
        System.out.println("猫吃鱼"); 
    }
    public void playGame() { 
        System.out.println("猫捉迷藏"); 
    } 
}

image.gif

测试类

public class AnimalDemo { 
    public static void main(String[] args) { 
        //有父类引用指向子类对象 
        Animal a = new Cat(); 
        System.out.println(a.age); 
        // System.out.println(a.weight); 
        a.eat(); 
        // a.playGame(); 
    } 
}

image.gif

三、多态的好处和弊端

好处:

提高程序的扩展性,定义方法时候,使用父类型作为参数,在使用的时候,使用具体的子类型参与操作

弊端:

不能使用子类的特有成员

四、多态的转型

向上转型:

父类引用指向子类对象就是向上转型

向下转型:

格式:子类型 对象名 = (子类型) 父类引用;

代码演示:

动物类

public class Animal { 
    public void eat() { 
        System.out.println("动物吃东西"); 
    } 
}

image.gif

猫类

public class Cat extends Animal {
    @Override 
    public void eat() { 
        System.out.println("猫吃鱼"); 
    }
    public void playGame() { 
        System.out.println("猫捉迷藏"); 
    } 
}

image.gif

测试类:

public class AnimalDemo { 
    public static void main(String[] args) { 
        //多态 
        //向上转型 
        Animal a = new Cat(); 
        a.eat(); 
        // a.playGame(); 
        //向下转型 
        Cat c = (Cat)a; 
        c.eat(); 
        c.playGame(); 
    } 
}

image.gif

五、多态的案例

需求:请采用多态的思维实现猫和狗的案例,并在测试类中进行测试

代码实现:

动物类

public class Animal { 
    private String name; 
    private int age; 
    public Animal() { 
    }
    public Animal(String name, int age) { 
        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 eat() { 
        System.out.println("动物吃东西"); 
    } 
}

image.gif

猪类

public class Cat extends Animal { 
    public Cat() { 
    }
    public Cat(String name, int age) { 
        super(name, age); 
    }
    @Override 
    public void eat() { 
        System.out.println("猫吃鱼"); 
    } 
}

image.gif

狗类

public class Dog extends Animal { 
    public Dog() { 
    }
    public Dog(String name, int age) { 
        super(name, age); 
    }
    @Override 
    public void eat() { 
        System.out.println("狗吃骨头"); 
    } 
}

image.gif

测试类

public class AnimalDemo { 
    public static void main(String[] args) { 
        //创建猫类对象进行测试 
        Animal a = new Cat(); 
        a.setName("加菲"); 
        a.setAge(5); 
        System.out.println(a.getName() + "," + a.getAge()); 
        a.eat(); 
        a = new Cat("加菲", 5); 
        System.out.println(a.getName() + "," + a.getAge()); 
        a.eat(); 
    } 
}

image.gif


目录
相关文章
|
9月前
|
Java 开发工具
【Azure Storage Account】Java Code访问Storage Account File Share的上传和下载代码示例
本文介绍如何使用Java通过azure-storage-file-share SDK实现Azure文件共享的上传下载。包含依赖引入、客户端创建及完整示例代码,助你快速集成Azure File Share功能。
609 6
|
11月前
|
存储 安全 Java
java: 无法访问org.springframework.ldap.core.LdapTemplate
java: 无法访问org.springframework.ldap.core.LdapTemplate
270 9
|
Java 应用服务中间件 Docker
java-web部署模式概述
本文总结了现代 Web 开发中 Spring Boot HTTP 接口服务的常见部署模式,包括 Servlet 与 Reactive 模型、内置与外置容器、物理机 / 容器 / 云环境部署及单体与微服务架构,帮助开发者根据实际场景选择合适的方案。
695 25
|
缓存 Java 数据库
Java 访问修饰符使用方法与组件封装方法详细说明
本文详细介绍了Java中访问修饰符(`public`、`private`、`protected`、默认)的使用方法,并结合代码示例讲解了组件封装的核心思想与实现技巧。内容涵盖数据封装、继承扩展、模块化设计与接口隔离等关键技术点,帮助开发者提升代码的可维护性与安全性,适用于Java初学者及进阶开发者学习参考。
259 1
|
Java 编译器 程序员
java中重载和多态的区别
本文详细解析了面向对象编程中多态与重载的概念及其关系。多态是OOP的核心,分为编译时多态(静态多态)和运行时多态(动态多态)。编译时多态主要通过方法重载和运算符重载实现,如Java中的同名方法因参数不同而区分;运行时多态则依赖继承和方法重写,通过父类引用调用子类方法实现。重载是多态的一种形式,专注于方法签名的多样性,提升代码可读性。两者结合增强了程序灵活性与扩展性,帮助开发者更好地实现代码复用。
920 0
|
存储 算法 安全
Java对象创建和访问
Java对象创建过程包括类加载检查、内存分配(指针碰撞或空闲列表)、内存初始化、对象头设置及初始化方法执行。访问方式有句柄和直接指针两种,前者稳定但需额外定位,后者速度快。对象创建涉及并发安全、垃圾回收等机制。
190 0
Java对象创建和访问
|
开发框架 移动开发 Java
课时2:Java简介(Java发展概述)
课时2:Java简介(Java发展概述) 摘要: 1. Java基础知识:介绍Java作为编程语言及其思想。 2. Java的发展历史:从1991年GREEN项目到1995年正式推出,历经网景公司、HotJava浏览器等关键节点。 3. Java的版本信息:涵盖从JDK 1.0到JDK 1.8的主要版本及特性,如Lambda表达式和模块化支持。
416 0
|
NoSQL JavaScript 前端开发
Java访问MongoDB
Java访问MongoDB
260 21
|
9月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
428 1