1.多态性是面向对象程序设计的重要部分。在Java语言中,通过使用方法的重载和重写实现类的多态性。

2.重写(覆盖)是指父子类之间的关系,当子类继承父类中所有可能被子类访问的成员方法时,如果子类的方法名与父类的方法名相同,那么子类就不能继承父类的方法,这时,称为子类的方法重写了父类的方法。重写体现了子类补充或者改变父类方法的能力。通过重写,可以使一个方法在不同的子类中表现出不同的行为。多态其实不依赖具体类,依赖抽象类和接口,接下来附上一个例子:

目录结构:

Animal.java文件:

package tom.bean;/** 定义一个动物类,作为父类*/
public class Animal {public Animal(){   //无参构造方法}public void eat(){ //eat()方法System.out.println("动物吃东西");}
}

Dog.java文件:

package tom.bean;/** 定义一个狗类,作为动物类的子类,继承动物类*/
public class Dog extends Animal{public Dog(){   //无参构造方法}public void eat(){ //eat()方法,重写了Animal类的eat()方法System.out.println("狗吃狗粮");}
}

Cat.java文件:

package tom.bean;/** 定义一个猫类,作为动物类的子类,继承动物类*/
public class Cat extends Animal{public Cat(){   //无参构造方法}public void eat(){ //eat()方法,重写了Animal类的eat()方法System.out.println("猫吃猫粮");}
}

Tiger.java文件:

package tom.bean;/** 定义一个Tiger老虎类,继承Animal动物类*/
public class Tiger extends Animal {
}

Test.java文件,测试类:

package tom.test;import tom.bean.Cat;
import tom.bean.Dog;
import tom.bean.Tiger;/** 测试类,打印输出信息*/
public class Test {public static void main(String[] args){Dog dog=new Dog();//创建Dog类的对象System.out.println("执行dog.eat();语句后的结果:");dog.eat();//调用eat()方法Cat cat=new Cat();//创建Cat类的对象System.out.println("执行cat.eat();语句后的结果:");cat.eat();//调用eat()方法Tiger tiger=new Tiger();//创建Tiger对象System.out.println("执行tiger.eat();语句的结果:");tiger.eat();//调用eat()方法,此时调用的是父类的eat()方法}
}

运行Test.java文件后,结果为:

从上面的例子可以知道,Dog类和Cat类都重写了父类的eat()方法,所以执行的是子类的eat()方法,但是Tiger类没有重写父类的方法,所以执行的是父类中的eat()方法。

3.方法的重载是指在一个类中出现多个方法名相同,但参数个数或参数类型不同的方法,则称为方法的重载。Java语言在执行该具有重载关系的方法时,将根据调用参数的个数和类型区分具体执行的是哪个方法。下面给出一个例子:定义一个Shape类,在类中定义两个名称为getArea()的方法(参数个数不同)和两个名称为draw()的方法(参数类型不同):

Shape.java文件:

package tom.bean;public class Shape {final float PI=3.14159f;//定义一个用于表示圆周率的常量PIpublic float getArea(float r){   //定义一个用于计算面积的方法getArea(),求圆形的面积float area=PI*r*r;return area;}public float getArea(float length,float width){   //重载getArea()方法,用来求矩形的面积,重载方法带的参数个数不同float area=length*width;return area;}//画任意形状的图形public void draw(int num){   //定义一个用于画图的方法draw()System.out.println("画一个"+num+"个任意形状的图形");}//画指定形状的图形public void draw(String shape){    //重载draw()方法,重载方法中带的参数类型不同System.out.println("画一个"+shape);}//主方法public static void main(String[] args){Shape shape=new Shape();//创建Shape类的对象float l=10;//声明一个常量,初始化为10,表示矩形的长float w=20;//声明一个常量,初始化为20,表示矩形的宽float rectangleArea=shape.getArea(l, w);//获得矩形的面积,并赋予rectangleAreaSystem.out.println("长度为"+l+",宽度为"+w+"的矩形面积为:"+rectangleArea);//打印输出矩形的面积float r=5;float circleArea=shape.getArea(r);System.out.println("半径为"+r+"的圆形的面积为:"+circleArea);shape.draw(3);//调用draw()方法shape.draw("圆锥");}
}

运行此程序,结果为:

注:重载的方法直接并不一定必须有联系,但是为了提高程序的可读性,一般只重载功能相似的方法,在进行方法的重载时,方法返回值的类型不能作为区分方法的标志!

4.以上就是通过方法的重写和重载实现类的多态性,仅供大家学习参考,写得不好,请见谅,如有错误请指出,谢谢!



实现类的多态性,方法的重写和重载相关推荐

  1. 方法的重写和重载,接口和抽象类区别

    方法的重写和重载,接口和抽象类区别,新手入门必看!!!!!要记住 方法的重写和重载 重写 重载 接口和抽象类 说明 方法的重写和重载 重写 在Java程序中,类的继承关系可以产生一个子类,子类继承父类 ...

  2. 009-对象—— 构造方法__construct析构方法__destruct使用方法 PHP重写与重载

    <?php /**构造方法__construct析构方法__destruct使用方法 PHP重写与重载*/ //构造方法:当实例化对象时,自动运行的方法 /*class channel{func ...

  3. Java Object类中toString方法的重写

    Object类中的tostring方法的: 当我们输出一个对象时,实际是输出的是这个类中的tostring方法,是一个地址值,而不是类中的属性. 一:子类没有重写Object类中的toStrinng方 ...

  4. C# 继承实现父类方法、重写、重载

    继承是派生类(子类)去实现(重写<override>.重构<new>)基类(父类)的方法或属性.从而获取在派生类中要实现的功能. 子类调用父类构造方法,在父类中有个实现姓名和年 ...

  5. java 多态与重载的区别_java实现多态 方法的重写和重载的区别

    1.方法的重写 思路:先写一个父类People,在类中定义一个 print方法 ,然后写一个子类 Student 继承父类,重写print方法. //父类 class People{ public v ...

  6. 方法的重写、重载及隐藏

    首先,重写和隐藏是发生在两个类中的,而重载可以发生在一个类中. 重写的概念就是顾名思义了:重新写一遍:方法名.参数及返回值是一模一样的,可能实现的过程不一样,为什么要重写?因为原来的方法不够perfe ...

  7. 父子类之间,成员函数重写、重载以及重定义的区别

    1.重写override:也叫做覆盖.子类重新定义父类中有相同名称和参数列表的虚函数.函数特征相同. 重写需要注意: 1) 被重写的函数不能是static的.必须是virtual的 2) 重写函数必须 ...

  8. Java中方法的重写(overriding)和重载(overloading)的区别

    Java中方法的重写(overriding)和重载(overloading) 重写 在子类中可以根据需要对从父类中继承来的方法进行改造,也称为重置.覆盖. 在子类中创建一个和父类中的一个相同名字.相同 ...

  9. Java的访问控制权限、构造函数、类初始化顺序、重写与重载

    1. Java的访问控制权限 1.1 访问控制权限总体描述 1.2 类的访问控制权限 2. Java构造函数 2.1 构造函数的类型 2.2 构造函数的特性 2.3 子类如何访问父类的构造函数? 2. ...

最新文章

  1. 数据结构 单链表 C
  2. DevExpress助您开发Windows8 UI应用程序
  3. SasSHRM中基于shiro的认证授权:系统微服务配置shiro
  4. 如何查看redis占用内存大小
  5. FreeBSD磁盘标签实例分析
  6. swift-延时加载函数
  7. 中文的在一个字符串中查找另一个字符
  8. 关于VC6.0一些常见问题和解决方案
  9. java 快逸报表_数据填报 | 快逸报表工具-Java报表软件
  10. 基于MATLAB的机械振动合成规律研究,基于MATLAB的机械振动分析研究
  11. CIM系统与MES系统介绍
  12. 增强型植被指数——EVI
  13. 【转载】project2019安装教程
  14. android barchart设置标题,android - 如何设置MPAndroidChart BarChart的高度和宽度? - 堆栈内存溢出...
  15. get请求400错误 vue_VUE 配置proxy代理后,前台报错400 bad request
  16. MacOS自带ssh+XQuartz连接OpenBSD6.5
  17. anguarjs 上传图片预览_前端战五渣学前端——FileReader预览本地文件
  18. 【python】numpy.percentile()函数
  19. php编程入门先学什么 PHP程序员需要具备哪些技能
  20. 论文写作各种图片格式转成eps格式(inkscape)

热门文章

  1. HBuilder 模拟器
  2. [剑指offer] 61. 序列化二叉树
  3. Spring Boot2.0之 原理—创建内置Tomcat容器
  4. HDOJ 4005-The war解题报告
  5. JDBC之用元数据将结果集封装为List对象
  6. 我在项目中用到的vue FullCalendar的内置函数以及配置项
  7. 小程序入门到精通(二):了解小程序开发4个重要文件
  8. Function(函数)
  9. php 上传 blob,Laravel框架+Blob实现的多图上传功能示例
  10. mantis apache mysql_Debian下mysql5+php5+apache2+mantis服务器升级