前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >实现类的多态性,方法的重写和重载

实现类的多态性,方法的重写和重载

作者头像
软件小生活
发布2021-08-16 15:48:38
7130
发布2021-08-16 15:48:38
举报
文章被收录于专栏:软件小生活

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

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

目录结构:

Animal.java文件:

代码语言:javascript
复制
package tom.bean;
/*
 * 定义一个动物类,作为父类

 */

public class Animal {
  public Animal(){  //无参构造方法

  }
  
  public void eat(){  //eat()方法

    System.out.println("动物吃东西");
  }
}

Dog.java文件:

代码语言:javascript
复制
package tom.bean;


/*

 * 定义一个狗类,作为动物类的子类,继承动物类

 */

public class Dog extends Animal{
  public Dog(){  //无参构造方法

  }
  
  public void eat(){  //eat()方法,重写了Animal类的eat()方法

    System.out.println("狗吃狗粮");
  }
}

Cat.java文件:

代码语言:javascript
复制
package tom.bean;


/*

 * 定义一个猫类,作为动物类的子类,继承动物类

 */

public class Cat extends Animal{
  public Cat(){  //无参构造方法

  }
  
  public void eat(){  //eat()方法,重写了Animal类的eat()方法

    System.out.println("猫吃猫粮");
  }
}

Tiger.java文件:

代码语言:javascript
复制
package tom.bean;


/*

 * 定义一个Tiger老虎类,继承Animal动物类

 */

public class Tiger extends Animal {
}

Test.java文件,测试类:

代码语言:javascript
复制
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文件:

代码语言:javascript
复制
package tom.bean;


public class Shape {
  final float PI=3.14159f;//定义一个用于表示圆周率的常量PI

  
  public 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);//获得矩形的面积,并赋予rectangleArea

    System.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.以上就是通过方法的重写和重载实现类的多态性,仅供大家学习参考。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-12-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 软件小生活 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档