java中的多态

多态

多态是一种非常有用的Java语法规则。
多态存在于继承当中,只有父类和子类之间可以形成多态,多态的规则简单来说就是父类可以存在的地方子类一定可以使用。多态在设计模式中式非常常见的。经常可以利用多态来达到类的复用功能,用几个简单的示例来说明一下多态的作用和概念。
编辑工具选择Eclipse
我们来创建四个Java文件,分别是Shapes、Rectangles、Ellipse、Demo
首先我们来编写Shape.java文件

public class Shapes {
	private int width;
	private int height;
	public Shapes() {
		
	}
	public int getWidth() {
		return width;
	}
	public void setWidth(int w) {
		width=w;
	}
	public int getHeight() {
		return height;
	}
	public void setHeight(int h) {
		height=h;
	}
	public Shapes getProject(Shapes s) {
		return s;
	}
}

重点是在方法getProject(Shapes s)因为这个时候我们只有一个Shapes类,我们要返回对象也只能返回Shapes类型。这样看起来没什么问题,但是我们在建立其他对象的时候就会出现问题。
我们接下来创建一个Rectangles.java文件。我们首先将它设置为Shapes类的子类。
示例代码如下:

public class Rectangles extends Shapes{
	public Rectangles() {
		
	}
}

在这里我们因为是Shapes类的子类所有它继承了父类的所有属性和方法。
然后我们创建测试用的Demo.java文件
示例代码如下:

public class Demo {
	public static void main(String[] args) {
		Rectangles rect=new Rectangles();
		rect.getProject(rect);
	}
}

我们运行后看到方法getProject(Shapes s)没有任何问题。
但是我们创建的却是Rectangles的对象实例,它依然可以被当做Shapes对象类型变量参数添加到方法中。
那我们接下来再创建一个Ellipse.java文件
示例代码如下:

public class Ellipses {
	public Ellipses() {

	}
}

然后我们在Demo.java文件中在添加一段代码
public class Demo {
public static void main(String[] args) {
Ellipses ellipse=new Ellipses();
Shapes shape=new Shapes();
shape.getProject(ellipse);
}
}
我们建立一个Ellipses的对象实例,因为Ellipses与Shapes没有继承关系,所以当将Ellipses对象创建的ellipse实例放入getProject(Shapes s)方法中当做参数时,这个方法是不能实现的,因为ellipse实例不是Shapes的对象实例。
但是如果我们将Ellipses文件的代码做如下修改:

public class Ellipses extends Shapes{
	public Ellipses() {
		
	}
}

将其变成Shapes类的子类。这个时候,我们再来看之前的Demo文件里的getProject(Shapes s)方法就不会报错了。就可以用其子类来替代掉父类。而不用重新编写这个方法了。
而且我们还可以换一种更加直观的编写方法。
现在我们重新来编写一次Demo文件代码:

public class Demo {
	public static void main(String[] args) {
		Shapes rect=new Rectangles();
		Ellipses ellipse=new Ellipses();
		rect.getProject(rect);
		rect.getProject(ellipse);
	}
}

我们可以看到我们使用了一个很奇怪的语法:Shapes rect=new Rectangles();
在这里我们使用的是父类的类型,而后面new操作符跟的却是Rectangles(),这里你可以把他理解成类型转换把他拆分开来看:
首先声明一个Shapes rect;
然后在使用new 操作符创建一个Rectangles()对象实例。
然后将他们连接在一起。
但是这个也只是在继承关系中才可以使用。
在上例子中,Ellipses类和Rectangles类都是Shapes对象的子类。
所以他们都可以替代父类的存在。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值