java多态详解
转自:
http://www.java265.com/JavaCourse/202206/3756.html
java多态详解 下文笔者将详细介绍java多态,如下所示何为多态呢?
多态指: 一个同类型的对象,执行同一行为,但是表现出不同的行为内容
多态的常见形式
多态示例: 父类类型 对象名称 = new 子类构造器; 接口 对象名称 = new 实现类构造器;例:
//父类: public class User { public String name ="用户"; void run(){ } } //子类1: public class Student extends User{ public String name = "学生"; @Override void run() { System.out.println("student run!"); } } //子类2: public class Teacher extends User{ public String name = "老师"; @Override void run() { System.out.println("teacher run"); } } //main方法: public static void main(String[] args) { User a1 = new Student(); User a2 = new Teacher(); a1.run(); a2.run(); System.out.println(a1.name); System.out.println(a2.name); }
多态中成员访问特点
方法调用 编译看左 运行看右例:
在编译的时候 先访问"User a1 = new Student();" 左边“User父类”中的方法 在运行的时候,会访问右边"Student子类"中的方法
多态的优点
1. 在多态形式下,右边对象可以解耦合,便于扩展和维护 User a = new Student(); User a = new Teacher(); a.run();//当业务行为随对象而变,只需增加实现类 2.在方法定义时,使用父类作为参数类型,则方法可接收父类的一切子类
多态的缺点
多态下不能使用子类的独有功能 只能使用公共的功能
多态情况下,如何使用子类的特有功能呢
实现思路: 直接为接收到的类型变量,做类型转换为子类,即可使用子类中独有的功能 注意事项: 当类型转换失败时,会出现ClassCastException异常 笔者建议,在转换前使用 instanceof进行类型判断
类型转换的方式分享
自动类型转换
User s = new Student(); s.run();
强制类型转换
子类 对象变量 = (子类)父类类型变量 User s1 = new Student(); //s1.run(); × Student s2 = (Student)s1; s2.run();// √