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之为什么使用向上转型而不直接创建子类对象的主要内容,如果未能解决你的问题,请参考以下文章

Java小白入门200例18之随机数的使用

Java小白入门200例16之方法的定义和使用

Java小白入门200例98之Java异常

Java小白入门200例55之购物卡使用分配问题

Java小白入门200例95之Java匿名类

Java小白入门200例27之Java二维数组的定义和使用