Java中的多态

目录

1.多态的实现条件

2.向上转型

2.1三种转型方法

2.2.1直接赋值

2.2.2方法的传参

2.2.3方法的返回值

2.2转型之后的运行规则

3.多态的使用


1.多态的实现条件

三个条件:

①必须式继承关系

②子类必须要对父类中的方法进行重写

③向上转型:用父类类型的引用,指向子类的对象

2.向上转型

2.1三种转型方法

2.2.1直接赋值

父类A,子类B

A a=new B(参数);

java 复制代码
//Animal.java
public class Animal {
    String name;
    int age;

    public Animal(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public void eat(){
        System.out.println(name+"吃吃吃");
    }
}
//Dog.java
public class Dog extends Animal{
    public Dog(String name, int age) {
        super(name, age);
    }
    public void bark(){
        System.out.println(name+"汪汪汪");
    }
}
//test.java
public class test {
    public static void main(String[] args) {
    Animal animal=new Dog("xiaohuang",12);
    }
}

2.2.2方法的传参

java 复制代码
public class test {
    public static void fun1(Animal animal){
        animal.eat();
    }
    public static void main(String[] args) {
        Dog dog = new Dog("xiaobai", 23);
        fun1(dog);

2.2.3方法的返回值

java 复制代码
public static Shape method() {
    // 返回子类对象 → 自动向上转型
    return new Circle();
}

2.2转型之后的运行规则

只能调用父类有的成员变量或者方法,如果子类中重写了父类中的方法,虽然调用的还是父类中的方法,但是实际上执行的是子类中的方法

举个例子:

java 复制代码
//Animal.java
public class Animal {
    String name;
    int age;

    public Animal(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public void eat(){
        System.out.println(name+"吃吃吃");
    }
}
//Dog.java
public class Dog extends Animal{
    public Dog(String name, int age) {
        super(name, age);
    }
    public void eat(){
        System.out.println(name+"吃狗粮");
    }
}
//test.java
public class test {

    public static void main(String[] args) {
        Animal animal=new Dog("xiaohuang",12);
        animal.eat();
    }
}

执行结果:

而不是xiaohuang吃吃吃

3.多态的使用

多态的使用,可以帮助你省掉大量的if、else语句

例如:

java 复制代码
//Shape.java
public class Shape {
    public void draw(){}
}
//Circle.java
public class Circle extends Shape {
    @Override
    public void draw() {
        super.draw();
        System.out.println("画一个⚪");
    }
}
//Juxing.java
public class Juxing extends Shape{
    @Override
    public void draw() {
        System.out.println("画一个□");
    }
}
//Sanjiaio.java
public class Sanjiao extends Shape{
    @Override
    public void draw() {
        System.out.println("画一个◁");
    }
}
//test.java
public class test {
    public static void main(String[] args) {
        Shape shape1=new Circle();
        Shape shape2=new Sanjiao();
        Shape shape3 =new Juxing();
        shape1.draw();
        shape2.draw();
        shape3.draw();
}

输出结果:

或者:

java 复制代码
public class test {
    public static void main(String[] args) {
Circle circle=new Circle();
        Sanjiao sanjiao=new Sanjiao();
        Juxing juxing=new Juxing();
        Shape[] shapes={circle,circle, sanjiao,juxing};
        for(Shape shape:shapes){
            shape.draw();
        }
    }

输出结果:

相关推荐
lhldsg5 小时前
AI零售系统实战指南:从架构设计到落地部署全解析
java·人工智能·小程序·uni-app·零售
Interview Aid1125 小时前
TikTok OA 四题分享|半小时内 AC,题目基本都是实现题
java·开发语言·算法·面试·职场和发展
mldong5 小时前
换了工作流引擎,前端一行代码没改
java·架构
CoderIsArt12 小时前
C#中UI 线程与 Dispatcher
开发语言·ui·c#
微尘寒风12 小时前
【Git】的安装和使用
java·git
y = xⁿ13 小时前
DeepSeek Harness 学习日记:关于Agent接口,工具调用的底层实现
android·java·学习
侧耳倾听11114 小时前
jwt使用简介
java·jwt
顶点多余14 小时前
那些在算法中适合巩固的知识点---1
java·前端·算法
AI人工智能+电脑小能手14 小时前
大白话说Java设计模式-46-责任链模式(业务实战篇)
java·设计模式·责任链模式·风控校验·servlet filter·spring interceptor·链式处理
jay神14 小时前
【计算机毕业设计】基于SpringBoot的程序教学辅助系统
java·前端·vue.js·spring boot·后端·毕业设计·课程设计