本文介绍: 代码演示:首先创建类:Test:运行结果: 举例:仍然是刚才的人类、学生类、老师类 ,输出他们的name:结果: 示例:示例:
什么是多态
- 多态是在继承/实现情况下的一种现象,表现为:对象多态、行为多态
对象多态:举个栗子,比如一个人,他可以是一个老师,也可以是一个歌手,也可以是一个丈夫……
行为多态:举个栗子,比如都是人来唱歌,有的人唱的很好听,有的五音不全,或者说都是去上学,有的是学霸,而有的是学渣……
代码演示:
首先创建类:
public class People { //人类
public String name = "people";
public void run(){ //跑步
System.out.println("人会跑步");
}
}
public class Student extends People{ //学生类,继承人类
public String name = "student";
@Override
public void run() { //跑步
System.out.println("学生跑的贼快~");
}
}
public class Teacher extends People{ //老师类,继承人类
public String name = "teacher";
@Override
public void run() { //跑步
System.out.println("老师跑的气喘吁吁~");
}
}
Test:
public class Test {
public static void main(String[] args) {
People s = new Student(); //对象多态,人可以是学生,人的范围比学生大,学生继承自人,学生也是人
s.run(); //学生跑步
People t = new Teacher(); //同理学生
t.run(); //老师跑步
}
}
运行结果:
多态的前提
- 有继承/实现关系,存在父类引用子类对象,存在方法重写
多态注意事项
- 多态强调对象和行为多态性,类中的属性(成员变量)不谈多态
- 对于方法/行为,编译看左边,运行看右边,即编译看父类,实际运行看子类
- 对于成员变量/属性,编译看左边,运行仍看左边,即编译看父类,实际运行也是父类的
- 这里的左边右边是指对象定义时赋值=号的左边右边
举例:
仍然是刚才的人类、学生类、老师类 ,输出他们的name:
public class Test2 {
public static void main(String[] args) {
People s = new Student();
System.out.println(s.name); //编译看左边,运行看左边
People t = new Teacher();
System.out.println(t.name);
}
}
结果:
使用多态的好处
- 在多态形式下,右边对象是解耦合的,更便于维护和拓展
- 定义方法时,使用父类类型的形参,可以接收一切子类对象,拓展性更强、更便利
解耦合:右边对象随时切换,后续业务随时改变
多态的存在的问题
- 无法直接调用子类独有功能
多态下的类型转换
类型转换
- 自动类型转换:父类 变量名 = new 子类(); 例如 People p = new Teacher
- 强制类型转换:子类 变量名 = (子类) 父类变量;例如 Teacher t = (Teacher)p;
强制类型转换的注意事项
- 存在继承/实现关系就可以在编译阶段进行强制类型转换,编译阶段不会报错
- 运行时,如果发现对象的真实类型与强转后的类型不同,就会报类型转换异常(ClassCastException)的错误,即只能强制转换成多态定义时指向的子类
示例:
- 因此,强转前建议使用instanceof关键字,判断当前对象的真实类型,再进行强转
示例:
原文地址:https://blog.csdn.net/m0_71386740/article/details/135582690
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_57958.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。