java多态详解
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();// √
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


