(schoolwork)Java多态

多态的概念

多态是同一个行为具有多个不同表现形式或形态的能力。
多态就是同一个接口,使用不同的实例而执行不同操作。

多态的原理

继承关系使一个子类能继承父类的特征,每个子类的实例都是其父类的实例,因此当形参是父类型时,总是可以把子类的实例传给这个形参。
并且所有使用父类型对象的地方都可以使用子类型的对象。

多态的实现

多态的实现需要的是对于父类方法的重写,能使得所有子类对象使用与父类同名的方法进行操作,即实现同一个接口。
多态存在的三个必要条件
一、要有继承;
二、要有重写;
三、父类引用指向子类对象,可以有一个父类,多个子类。

Java中多态的使用

向上转型: 子类的对象可以直接赋给父类的对象变量。
向下转型: 将父类的引用强制转换成子类的引用,必须强制转换。
父类:

public class GeometricObject {
	private String color="white";
	private boolean filled;
	private java.util.Date dateCreated;
	
	public GeometricObject() {
		dateCreated=new java.util.Date();
	}
	public GeometricObject(String color,boolean filled) {
		dateCreated=new java.util.Date();
		this.color=color;
		this.filled=filled;
	}
	public String getColor() {
		return color;
	}
	public void setColor(String color) {
		this.color=color;
	}
	public boolean isFilled() {
		return filled;
	}
	public void setFilled(boolean filled) {
		this.filled=filled;
	}
	public java.util.Date getDateCreated() {
		return dateCreated;
	}
	public String toString() {
		return "created on "+dateCreated+"\ncolor: "+color+" and filled: "+filled;
	}
}

子类 圆

public class Circle extends GeometricObject {
	private double radius;
        
	public Circle() {
	}
	public Circle(double radius) {
		this.radius=radius;
	}
	public double getRadius() {
		return radius;
	}
	public void setRadius(double radius) {
		this.radius=radius;
	}
	public double getArea() {
		return radius*radius*Math.PI;
	}
	public double getDiameter() {
		return 2*radius;
	}
	public double getPerimeter() {
		return 2*radius*Math.PI;
	}
	public void printCircle() {
		System.out.println("The circle is created "+getDateCreated()+" and the radius is "+radius);
	}
}

子类 矩形

public class Rectangle extends GeometricObject {
	private double width;
	private double height;
	
	public Rectangle() {
	}
	public Rectangle(double width,double height) {
		this.width=width;
		this.height=height;
	}
	public Rectangle(double width,double height,String color,boolean filled) {
		this.width=width;
		this.height=height;
		setColor(color);
		setFilled(filled);
	}
	public double getWidth() {
		return width;
	}
	public void setWidth(double width) {
		this.width=width;
	}
	public double getHeight() {
		return height;
	}
	public void setHeight(double height) {
		this.height=height;
	}
	public double getArea() {
		return width*height;
	}
	public double getPerimeter() {
		return 2*(width+height);
	}
}

测试

public class PolymorphismDemo {
	public static void main(String[] args) {
		displayObject(new Circle(1,"red",false));
		displayObject(new Ractangle(1,1,"black",true));
	}
	public static void displayObject(GeometricObject object)  {
		System.out.println("Created on "+object.getDateCreated()+". Color is "+object.getColor());
	}
}

运行结果
输出了创建日期,是子类对象传给了父类的形参

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值