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


目录
相关文章
|
24天前
|
SQL Java 数据库连接
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率。本文介绍了连接池的工作原理、优势及实现方法,并提供了HikariCP的示例代码。
39 3
|
26天前
|
SQL Java 数据库连接
打破瓶颈:利用Java连接池技术提升数据库访问效率
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,避免了频繁的连接建立和断开,显著提升了数据库访问效率。常见的连接池库包括HikariCP、C3P0和DBCP,它们提供了丰富的配置选项和强大的功能,帮助优化应用性能。
44 2
|
1月前
|
Java
Java访问外网图片地址时,如何添加代理?
【10月更文挑战第14天】Java访问外网图片地址时,如何添加代理?
29 2
|
1月前
|
小程序 Java
小程序访问java后台失败解决方案
小程序访问java后台失败解决方案
44 2
|
1月前
|
小程序 JavaScript Java
小程序访问java后台
小程序访问java后台
27 1
|
1月前
|
存储 Java
深入理解java对象的访问定位
这篇文章深入探讨了Java对象的访问定位机制,比较了使用句柄和直接指针两种主流的对象访问方式,并指出了它们各自的优势,例如句柄访问在对象移动时的稳定性和直接指针访问的速度优势。
34 0
深入理解java对象的访问定位
|
2月前
|
安全 Java 开发者
Java修饰符与封装:理解访问权限、行为控制与数据隐藏的重要性
Java中的修饰符和封装概念是构建健壯、易维护和扩展的Java应用程序的基石。通过合理利用访问权限修饰符和非访问修饰符,开发者能够设计出更加安全、灵活且高效的代码结构。封装不仅是面向对象编程的核心原则之一,也是提高软件项目质量和可维护性的关键策略。
21 1
|
6月前
|
存储 Java
【JAVA学习之路 | 进阶篇】集合框架概述
【JAVA学习之路 | 进阶篇】集合框架概述
|
设计模式 缓存 网络协议
Java NIO学习(一):Java NIO概述
IO 的操作方式通常分为几种:同步阻塞 BIO、同步非阻塞 NIO、异步非阻塞 AIO。
159 0
Java NIO学习(一):Java NIO概述
|
Java Android开发 Windows
java基础学习_概述_day01总结
======================================================================================================================================================...
1824 0
下一篇
无影云桌面