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


目录
相关文章
|
15天前
|
Java
Java中的继承和多态是什么?请举例说明。
Java中,继承让子类继承父类属性和方法,如`class Child extends Parent`,子类可重写父类方法。多态允许父类引用指向子类对象,如`Animal a = new Dog()`,调用`a.makeSound()`会根据实际对象类型动态绑定相应实现,增强了代码灵活性和可扩展性。
10 0
|
22天前
|
搜索推荐 Java
Java的面向对象特性主要包括封装、继承和多态
【4月更文挑战第5天】Java的面向对象特性主要包括封装、继承和多态
15 3
|
1月前
|
Java
【Java】一个简单的接口例子(帮助理解接口+多态)
【Java】一个简单的接口例子(帮助理解接口+多态)
17 0
|
24天前
|
存储 NoSQL Java
Java数据库编程指南:实现高效数据存储与访问
【4月更文挑战第2天】Java开发者必须掌握数据库编程,尤其是JDBC,它是连接数据库的标准接口。使用Spring JDBC或JPA能简化操作。选择合适的JDBC驱动,如MySQL Connector/J,对性能至关重要。最佳实践包括事务管理、防SQL注入、优化索引和数据库设计。NoSQL数据库如MongoDB也日益重要,Java有对应的驱动支持。理解这些概念和技术是构建高效数据库应用的基础。
Java数据库编程指南:实现高效数据存储与访问
|
2天前
|
设计模式 存储 JavaScript
[设计模式Java实现附plantuml源码~创建型] 多态工厂的实现——工厂方法模式
[设计模式Java实现附plantuml源码~创建型] 多态工厂的实现——工厂方法模式
|
8天前
|
安全 Java API
java借助代理ip,解决访问api频繁导致ip被禁的问题
java借助代理ip,解决访问api频繁导致ip被禁的问题
|
11天前
|
SQL 缓存 Java
Java数据库连接池:优化数据库访问性能
【4月更文挑战第16天】本文探讨了Java数据库连接池的重要性和优势,它能减少延迟、提高效率并增强系统的可伸缩性和稳定性。通过选择如Apache DBCP、C3P0或HikariCP等连接池技术,并进行正确配置和集成,开发者可以优化数据库访问性能。此外,批处理、缓存、索引优化和SQL调整也是提升性能的有效手段。掌握数据库连接池的使用是优化Java企业级应用的关键。
|
1月前
|
Java
java中的多态
java中的多态
9 2
|
1月前
|
Java
Java包及访问限定
Java包及访问限定
8 0
|
1月前
|
SQL Java 关系型数据库
Java数据库访问
Java数据库访问