第四次java实验报告

Java实验报告

班级 计科二班 学号 20188437 姓名 何磊

完成时间 2019/9/25

评分等级

实验四 类的继承

  1. 实验目的
    1. 掌握类的继承方法;
    2. 变量的继承和覆盖,方法的继承、重载和覆盖实现;
  2. 实验内容

  1.  
  1. 实验过程(请自己调整格式)

(一)实验代码

package第四次java实验;

class Circle {

    private double radius; //radius圆的半径

    

    public Circle(){ //构造方法一

        this.setRadius(0);

    }

    

    public Circle(double r){ //构造方法二

        this.setRadius(r);

    }

    

    public double getRadius() { //取得圆的半径

        return radius;

    }

    public void setRadius(double radius) { //设置圆的半径

        this.radius = radius;

    }

    

    public double getPerimeter(){ //取得圆的周长

        return getRadius()*2*Math.PI;

    }

    

    public double getArea(){ //取得圆的面积

        return Math.PI*getRadius()*getRadius();

    }

    public void disp(){ //输出圆的半径、周长、面积

        System.out.println("半径:"+getRadius()+",周长:"+getPerimeter()+",面积:"+getArea());

    }

}

 

class Cylinder extends Circle{ //继承父类Circle

    private double height; //height:圆柱体的高

    public double getHeight() { //取得圆柱体的高

        return height;

    }

    public void setHeight(double height) { //设置圆柱体的高

        this.height = height;

    }

    

    Cylinder(double r,double h){ //设置圆的半径和圆柱体的高

        this.setRadius(r);

        this.setHeight(h);

    }

    

    public double getVol(){ //取得圆柱体的体积

        return getArea()*getHeight();

    }

    

    public void dispVol(){ //输出圆柱体的体积

        System.out.println("圆柱体的体积:"+getVol());

    }

}

 

import java.util.Scanner;

public class test {

    public static void main(String[] args) {

        Scanner input=new Scanner(System.in);

        System.out.println("请输入圆的半径:");

        int r=input.nextInt(); //将输入的值存入变量r

        System.out.println("请输入圆柱体的高:");

        int h=input.nextInt(); //将输入的值存入变量h

        Cylinder yuan=new Cylinder(r,h); //创建类

        yuan.disp();

        yuan.dispVol();

        //调用类中的输出方法

    }

}

(二)运行结果

四、结论

本次实验主要考察了掌握类的继承方法、变量的继承和覆盖,方法的继承、重载和覆盖实现;总体比较简单,认识了新语句class+子类名+extends+父类名实现类的继承,注意类不能多重继承。

重载和覆写的区别见下表:

1.什么是java的多态

a. 编译时多态:方法的重载;

b. 运行时多态:JAVA运行时系统根据调用该方法的实例的类型来决定选择调用哪个方法则被称为运行时多态。(我们平时说得多的事运行时多态,所以多态主要也是指运行时多态);

上述描述认为重载也是多态的一种表现,不过多态主要指运行时多态。

2.运行时多态

a. 面向对象的三大特性:封装、继承、多态。从一定角度来看,封装和继承几乎都是为多态而准备的。这是我们最后一个概念,也是最重要的知识点。

b. 多态的定义:指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用)

c. 实现多态的技术称为:动态绑定(dynamic binding),是指在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。

d. 多态的作用:消除类型之间的耦合关系。

e. 现实中,关于多态的例子不胜枚举。比方说按下 F1 键这个动作,如果当前在 Flash 界面下弹出的就是 AS 3 的帮助文档;如果当前在 Word 下弹出的就是 Word 帮助;在 Windows 下弹出的就是 Windows 帮助和支持。同一个事件发生在不同的对象上会产生不同的结果。

下面是多态存在的三个必要条件,要求大家做梦时都能背出来!

多态存在的三个必要条件
一、要有继承;
二、要有重写;
三、父类引用指向子类对象。

 多态的好处

1.可替换性(substitutability)。多态对已存在代码具有可替换性。例如,多态对圆Circle类工作,对其他任何圆形几何体,如圆环,也同样工作。
2.可扩充性(extensibility)。多态对代码具有可扩充性。增加新的子类不影响已存在类的多态性、继承性,以及其他特性的运行和操作。实际上新加子类更容易获得多态功能。例如,在实现了圆锥、半圆锥以及半球体的多态基础上,很容易增添球体类的多态性。
3.接口性(interface-ability)。多态是超类通过方法签名,向子类提供了一个共同接口,由子类来完善或者覆盖它而实现的。如图8.3 所示。图中超类Shape规定了两个实现多态的接口方法,computeArea()以及computeVolume()。子类,如Circle和Sphere为了实现多态,完善或者覆盖这两个接口方法。
4.灵活性(flexibility)。它在应用中体现了灵活多样的操作,提高了使用效率。
5.简化性(simplicity)。多态简化对应用软件的代码编写和修改过程,尤其在处理大量对象的运算和操作时,这个特点尤为突出和重要。

来自https://www.cnblogs.com/liujinhong/p/6003144.html

原文地址:https://www.cnblogs.com/hlywzj/p/11584332.html