在JAVA学习有了一定基础和了解上将会继续深入学习多态,面向对象程序设计的三大支柱是封装、继承和多态,学习的步骤是循环渐进的,在学习了封装和继承的基础知识后进而了解多态。
什么是多态?多态意味着父类型的变量可以引用子类型的对象,注意这句话中的几个关键点,是父类型的变量,去引用子类型的对象。接下来的学习中就是去解释和运用这句话。
目录
HINT 1 继承
在引入多态之前,我们先再回顾一下继承的部分基础知识,我用最简白易懂的话来介绍自己对继承的理解:继承也就是说可以定义一个通用的类(也就是父类),之后继承该类为一个更加特定特殊的类,我们称之为子类。因为我们的关键是实实在在的对象,为了方便统筹,使用“类”对同一类型的对象建模,就是包含这些对象的共同点。那么不同的类,也就是说不同类型的对象可能会有一些共同的特征和行为,我们可以建一个通用类来表达这些共同之处,并被其他类共享,那么这些其他类就有了这些基本共同点,还可以有自己类独特的地方,这就是继承的关系,定义特定的类继承自通用类,且继承通用类中的特征和方法
这个还是比较好理解的,考虑一下几何对象,假设我们要设计类,来对像圆和矩形这样的几何对象建模,那么几何对象有许多共同的属性和行为,比如用某种颜色画出来,填充或者不填充等等,下面就是我们建的一个通用类 GeometricObject 来建模所有的几何对象,属性包括 color 和 filled,以及适用于这些属性的获取方法和设置方法(这里就涉及到私有变量等知识),当然还可以包括获取创建时间和返回该对象的 toString 字符串表示等,这些都是通用的:
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;
}
//返回这个对象的基础信息,其实由前面学过的重载可知,我们这里是重载了toString这个函数,它的原始父类应该是在Object中
public String toString()
{
return "created on " + dateCreated + "\ncolor: " + color + " and filled: " + filled;
}
}
明确了这样一种关系之后(当然这里不对父类和子类的定义关系做过多阐述),我们可以再建两个子类去继承这个类,(子类可以从它的父类中继承可访问的数据域和方法,注意是可访问的!)除此之外还可以添加新的数据域方法,如下面的 Circle类(当然可以继续衍生出 Rectangle 类,这不是这篇的重点┭┮﹏┭┮,主要熟知继承关系!):
public class Circle extends GeometricObject //这就是Circle类,要记住使用该语法继承我们需要的类
{
private double radius; //然后就可以在该类里定义使用额外的数据和方法以及继承自父类的可访问的数据域和方法
public Circle() {