JAVASEday06 多态

博客介绍了多态的概念,即事物存在多种体现状态。阐述了多态的体现,包括向上转型和向下转型,以及非静态成员函数、静态成员函数和成员变量在多态中的特点。说明了多态的前提是类间有继承或实现关系且存在覆盖,其好处是提高程序扩展性,应用主要通过对象向上转型实现参数统一。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

多态

什么是多态?简单的说,就是事物存在多种体现状态

1.多态的体现

先看一个例子

class Animal{
    public String name="animal";
    public void fun(){
        System.out.println("fun函数");
    }
    public void fun1(){
        System.out.println("动物叫");
    }
}
class Dog extends Animal{
    public String name="dog";
    public void fun1(){
        System.out.println("Dog叫");
    }
    public void lookdoor(){
        System.out.println("look door");
    }
}
public class DuoTai {
    public static void main(String[] args) {
        Animal animal = new Animal();
        System.out.println(animal.name);
        animal.fun();
        animal.fun1();
        System.out.println();
        Dog dog = new Dog();
        System.out.println(dog.name);
        dog.fun1();
        dog.lookdoor();
        System.out.println();
        Animal an=new Dog();
        System.out.println(an.name);//访问父类对象的实例变量
        an.fun1();//执行当前类的fun1方法
        an.fun();//执行从父类继承到的fun方法
        ((Dog) an).lookdoor();

    }
}

在这个例子中,前面两个引用和其创建的对象都是一个类型,而第三个则是父类引用指向了自己子类的对象, 这就产生了多态。当animal引用创建了一个dog对象时,an.name访问的是父类的实例变量,fun是执行继承父类的方法,fun1是执行当前类的方法, ==Animal an=new Dog();==这句代码将Dog类型提升为Animal类型,叫做 ==向上转型,是自动完成的。 == ((Dog) an).lookdoor(); 这句代码将父类型Animal转换为子类型的Dog,叫做 向下转型它强制将父类引用转成子类类型。 多态自始至终只有子类对象在变化。
这个例子还说明了
在多态中非静态成员函数的特点

  • 在编译时,参阅引用型变量所属类中是否有调用的方法,如果有,编译通过,如果没有,编译失败
  • 在运行时其,参阅对象所属类中是否有可调用的方法,
    静态成员函数的特点:无论编译和运行,参数参考引用类型变量的类
    在多态中
    成员变量的特点:无论编译和运行,参数参考引用类型变量的类

多态的前提

必须是类与类之间有关系,要么继承,要么实现。通常还有个前提, 就是存在覆盖
局限性:只能使用父类额引用访问父类额成员

多态的好处

多态的出翔提高了程序的扩展性

多态的应用

主要通过对象的向上转型来实现接收参数的统一。
看例子:

** 对于吃早餐这个行为来说,不管什么人吃,吃的动作怎样,都是吃 */
class Person{
    void eat(){
        System.out.println("eat food");
    }
}
class Student extends Person{
    void eat(){
        System.out.println("eat food slowly");
    }
}
class Worker extends Person{
    void eat() {
        System.out.println("eat food quickly");
    }
}
class Teacher extends Person{
    void eat() {
        System.out.println("eat food gently");
    }
}
public class A {
    // 所有的人不论吃相统一的方法进行
    public static void eatBreakFast(Person1 per) {
        per.eat();
    }
     public static void main(String[] args) {
        eatBreakFast(new Student());
        eatBreakFast(new Worker());
        eatBreakFast(new Teacher());
   }
}

运行结果:

  		eat food slowly
        eat food quickly
        eat food gently

如果不使用多态,则会多次重载eat()方法,当子类的类型非常多时,这是很不容易的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值