栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java笔记

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java笔记

多态

概述:同一对象,在不同时刻表现出来的不同形态
例:猫
可以说猫是猫:猫 cat = new 猫();
也可以说猫是动物:猫 animal = new 猫();
这里猫在不同的时刻表现出来了不同的形态,这就是多态。

多态的前提和体现:
有继承/实现关系
有方法重写
有父类引用指向子类对象

public class Animal {
    
    public void eat(){
        System.out.println("动物吃东西");
    }
    
}
//有继承
public class Cat extends Animal{
    //方法重写
    @Override
    public void eat() {
        System.out.println("猫吃鱼");
    }
}
public class AnimalDemo {
    public static void main(String[] args) {
        //有父类引用指向子类对象
        Animal a = new Cat();
    }
}

多态中成员访问特点
成员变量:编译看左边,执行看左边
成员方法:编译看左边,执行看右边
因为成员方法有重写,而成员变量没有

多态的好处和弊端
好处:提高了程序的扩展性
具体体现:定义方法时,使用父类型作为参数,将来在使用时,使用具体的子类型参与操作。
弊端:不能使用子类的特有功能

public class AnimalOperator {

    
    public void useAnimal(Animal a){
        a.eat();
    }

}
public class Animal {

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

}
public class Dog extends Animal {
    public void eat(){
        System.out.println("狗吃骨头");
    }
}
public class Pig extends Animal {
    public void eat(){
        System.out.println("猪吃白菜");
    }
}
public class AnimalDemo {
    public static void main(String[] args) {
        //创建动物操作类的对象,调用方法
        AnimalOperator ao = new AnimalOperator();
        Cat c = new Cat();
        ao.useAnimal(c);

        Dog d = new Dog();
        ao.useAnimal(d);

        Pig p = new Pig();
        ao.useAnimal(p);
    }
}

多态中的转型
向上转型:从子到父,父类引用指向子类对象
Animal a = new Cat();
向下转型:从父到子,父类引用转为子类对象
Cat c = (Cat)a;

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

//动物类
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("动物吃东西");
    }

}
public class Cat extends Animal{
    public Cat() {
    }

    public Cat(String name, int age) {
        super(name, age);
    }

    public void eat(){
        System.out.println("猫吃鱼");
    }
}
public class Dog extends Animal{
    public Dog() {
    }

    public Dog(String name, int age) {
        super(name, age);
    }

    public void eat(){
        System.out.println("狗吃骨头");
    }
}
public class AnimalDemo {
    public static void main(String[] args) {
        //创建猫类
        Animal a = new Cat();  //无参
        a.setName("加菲");
        a.setAge(3);
        System.out.println(a.getName() + "," + a.getAge());
        a.eat();

        a = new Cat("汤姆",5);   //带参
        System.out.println(a.getName() + "," + a.getAge());
        a.eat();

        System.out.println("-----------------");

        //创建狗类
        Animal b = new Dog();
        b.setName("旺财");
        b.setAge(3);
        System.out.println(b.getName() + "," + b.getAge());
        b.eat();

        b = new Dog("大黄",5);
        System.out.println(b.getName() + "," + b.getAge());
        b.eat();
        
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/708686.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号