Java小白入门200例85之为什么使用向上转型而不直接创建子类对象
Posted 编程界明世隐
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java小白入门200例85之为什么使用向上转型而不直接创建子类对象相关的知识,希望对你有一定的参考价值。
作者简介
作者名:编程界明世隐
简介:CSDN博客专家,从事软件开发多年,精通Java、javascript,博主也是从零开始一步步把学习成长、深知学习和积累的重要性,喜欢跟广大ADC一起打野升级,欢迎您关注,期待与您一起学习、成长、起飞!
引言
很多Java初学者问我,新手明明很用心、很努力学习的Java知识,转头又忘记了,很让人犯愁,小白如何能够快速成长、成为大牛呢?
其实要成为大神的技巧只有一个:“多学多练”,于是明哥就整理了比较典型的练习实例,通过练习能够快速提升编码技巧和熟练度,让你在成为大佬的路上一去不复返(切记要亲手练习哦)!
导航
✪ Java小白入门200例系列目录索引
◄上一篇 84.Java对象类型转换向上转型和向下转型
►下一篇 86.Java方法重载
概述
向上转型并不能调用子类特有属性和方法,我们必须先生成子类实例再赋值给父类引用(向上转型),然后将父类引用向下强制转换给子类引用(向下转型),这样才能调用子类中的所有成员。这看起来像是多次一举,还不如直接创建子类实例。
实例1
父类 People
package demo.demo85;
public class People {
// 吃饭
public void eat() {
System.out.println("吃饭");
}
// 睡觉
public void sleep() {
System.out.println("睡觉");
}
//做工作
public void doWork() {
}
}
子类 Student
package demo.demo85;
public class Student extends People {
//在校学习
public void doWork() {
System.out.println("在校学习");
}
//工作 方法
public void work() {
doWork();
}
}
子类Teacher
package demo.demo85;
public class Teacher extends People {
//在校教书
public void doWork() {
System.out.println("在校教书");
}
//工作 方法
public void work() {
doWork();
}
}
测试类
package demo.demo85;
public class Test {
public static void main(String[] args) {
Student student = new Student();
student.work();
Teacher teacher = new Teacher();
teacher.work();
}
}
运行:
在校学习
在校教书
分析:
确实我们通过分别实例化Student 和 Teacher ,然后调用work方法可以做到我们的效果,但是,我们发现work方法在每一个子类中都必须去实现吧,如果这方法的内容很多或者子类很多,是不是存在很多的冗余代码?
实例2
将子类中独有的 work 放提取到父类中,这样子类就无需实现这个方法了,同时此方法传入父类对象,通过父类来调用。
父类 People
package demo.demo85;
public class People {
// 吃饭
public void eat() {
System.out.println("吃饭");
}
// 睡觉
public void sleep() {
System.out.println("睡觉");
}
//做工作
public void doWork() {
}
//工作 方法
public void work(People p) {
p.doWork();
}
}
子类 Student
package demo.demo85;
public class Student extends People {
//在校学习
public void doWork() {
System.out.println("在校学习");
}
}
子类 Teacher
package demo.demo85;
public class Teacher extends People {
//在校教书
public void doWork() {
System.out.println("在校教书");
}
}
测试类
package demo.demo85;
public class Test {
public static void main(String[] args) {
People people = new People();
people.work(new Student());
people.work(new Teacher());
}
}
运行结果:
在校学习
在校教书
如果不用向上转型则必须写两个 work方法,一个传递 Student类对象,一个传递 Teacher类对象。这还是两个子类,如果有多个子类就要写很多相同的方法,造成重复。可以看出向上转型更好的体现了类的多态性,增强了程序的间接性以及提高了代码的可扩展性。当需要用到子类特有的方法时可以向下转型,这也就是为什么要向下转型。
小结
这节总结了“ Java为什么使用向上转型而不直接创建子类对象 ”,希望能对大家有所帮助,请各位小伙伴帮忙 【点赞】+【收藏】+ 【评论区打卡】, 如果有兴趣跟小明哥一起学习Java的,【关注一波】不迷路哦。
评论区打卡一波让我知道你,明哥会持续关注你的学习进度哦!
导航
✪ Java小白入门200例系列目录索引
◄上一篇 83.Java super关键字详解
►下一篇 86.Java方法重载
热门专栏推荐
1.Java小游戏系列(俄罗斯方块、飞机大战、植物大战僵尸等)
2.JavaWeb项目实战(图书管理、在线考试、宿舍管理系统等)
3.JavaScript精彩实例(飞机大战、扫雷、贪吃蛇、验证码等)
4.Java小白入门200例
5.从零学Java、趣学Java、以王者荣耀角度学Java
以上是关于Java小白入门200例85之为什么使用向上转型而不直接创建子类对象的主要内容,如果未能解决你的问题,请参考以下文章