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();//    √