在上篇推文中我们已经写了有关继承的一些东西,这篇多态写完,我们就剩下封装了,因为封装是与对象有关的一个概念,所以我决定把关于它的介绍放在下一篇对象篇。下面让我们切入正题:多态
在面向对象的程序设计语言中,多态是继数据抽象和继承之后的第三种基本特征。多态通过分离做什么和怎么做,从另一角度将接口和实现分离开来。多态不但能够改善代码的组织结构和可读性,还能够创建可拓展的程序——即无论在项目最初创建时还是在需要添加新功能时都可以“生长”的程序。——《java编程思想第四版》
多态可以用来提高程序的可扩展性。
西瓜籽疑惑之重载
西瓜籽:“我记得还有一个重载的概念,它和重写有什么区别吗?
大西瓜:“好问题,下面我们就来讲一下重载。”
重载:方法名相同,参数不同,返回值可以相同也可以不同。一个类中的不同的构造函数就是例子。方法可以以在其子类中被重载,这时重载方法就是属于子类特有的方法。
public class ZZZ {
//无参构造函数
public ZZZ(){}
//有参构造函数
public ZZZ(String name){}
}
我们知道实现多态的目的就是增加程序的扩展性,那么它具体可以体现为:
多态是同一个行为具有多个不同表现形式或形态的能力。 多态就是同一个接口,使用不同的实例而执行不同操作。
我们用代码来理解一下这两句话,其实这两句话表达的是一个意思。多态的核心有向上转型,所以其应用和我们上章在讲述向上转型使得示例相同,为了做出些区别我这次用内部类来写:
public class Dome {
//Person类
static class Person{
String name;
public void doing(){
System.out.println("我要吃饭");
}
}
//ZZZ类
static class ZZZ extends Person{
public void doing(){
System.out.println("我是西瓜籽,我不用吃饭!!!");
}
}
//DXG类
static class DXG extends Person{
public void doing(){
System.out.println("我是大西瓜,我没西瓜籽厉害,我要吃饭!");
}
}
public static void main(String[] args) {
Person zzz = new ZZZ();
Person dxg = new DXG();
zzz.doing();
dxg.doing();
}
}
输出结果:
我是西瓜籽,我不用吃饭!!!
我是大西瓜,我没西瓜籽厉害,我要吃饭!
- Continue -