第六周&java实验报告四

第六周&java实验报告四

一.实验目的

(1)掌握类的继承

(2)变量的继承和覆盖,方法的继承,重载和覆盖的实现;

二.实验的内容

(1)根据下面的要求实现圆类Circle。

1.圆类Circle的成员变量:radius表示圆的半径。

2.圆类Circle的方法成员:

       Circle():构造方法,将半径置0

       Circle(double r):构造方法,创建Circle对象时将半径初始化为r

       double getRadius():获得圆的半径值

       double getPerimeter():获得圆的周长

       void disp():将圆的半径和圆的周长,圆的面积输出到屏幕

实验代码:

package main;

import java.util.*;

class Circle{
    private double radius;

    public double getRadius() {
        return radius;
    }

    public void setRadius(double radius) {
        this.radius = radius;
    }
    public Circle() {
        setRadius(0);
    }
    public Circle(double r) {
        setRadius(r);
    }
    public double getPerimeter() {
        return 2*Math.PI*getRadius();
    }
    public void disp() {
        System.out.println("圆的半径为:"+getRadius());
        System.out.println("圆的周长为:"+getPerimeter());
        System.out.println("圆的面积为:"+Math.pow(getRadius(),2)*Math.PI);
    }
}
public class test1 {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入半径:");
        double radius=sc.nextDouble();
        Circle pr=new Circle();
        pr.setRadius(radius);
        pr.disp();
    }
}

实验结果截图:

实验过程和问题:

在这个题目中,按照题目的要求,首先定义了圆的半径radius,并对其进行封装,再按题目的要求一步步写出构造方法Circle()和Circle(double r),取得半径radius的值,并用公式计算出周长和面积出来,计算公式的书写方式老师在课堂上写过,题目中要用nextDouble()来读取输入的半径,最后用disp()将圆的半径和圆的周长,圆的面积输出到屏幕。

2)继承第一题中的圆Circle类,派生圆柱体类Cylinder。要求如下:

1.圆柱体类Cylinder的成员变量:height表示圆柱体的高。

2.圆柱体类Cylinder的成员方法:

        Cylinder(double r,double h)构造方法,创建Cylinder对象时将圆半径初始化为r,圆柱体高初始化为h。

        double getHeight():获得圆柱体的高

        double getVol():获得圆柱体的体积

        void dispVol():将圆柱体的体积输出到屏幕

3.按照第二题的Cylinder类,接上键盘的输入值作为圆的半径和圆柱体的高,计算圆柱体的体积

实验代码:

package main;

import java.util.*;

class Cylinder extends Circle{
    private double height;

    public double getHeight() {
        return height;
    }

    public void setHeight(double height) {
        this.height = height;
    }
    public Cylinder(double r,double h) {
        setRadius(r);
        setHeight(h);
    }
    public double getVol() {
        return Math.pow(getRadius(),2)*Math.PI*getHeight();
    }
    public void dispVol() {
        System.out.println("圆柱体的体积为:"+getVol());
    }
    }

public class test2 {
    public static void main(String[] args) {
    Scanner sc=new Scanner(System.in);
    System.out.println("请输入圆的半径:");
    double radius=sc.nextDouble();
    System.out.println("请输入圆的高:");
    double height=sc.nextDouble();
    Cylinder pr=new Cylinder(radius,height);
    pr.dispVol();
  }
}

实验结果截图:

实验过程和问题:

这是第一次使用继承来实现,老师讲过使用继承的方法,但是不知道一些方法要不要在子类重写,于是首先按题目要求定义了圆柱体的高height,并进行封装,基本按照第一题的格式进行书写,在第一题写了的方法没有再写,在读取了输入的半径和高后可以调用父类的构造方法进行计算并输出圆柱体的体积。由此可以看出继承的确能减少代码量,变得更简便。

学习课程总结

接口:接口通常以interface来声明,一个类通过继承接口的方式,从而来继承接口的抽象方法。接口中的抽象方法必须定义成public访问权限,这是不可改变的。接口要使用也必须通过子类,子类通过implements关键字实现接口。接口无法被实例化,但是可以被实现。一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须声明为抽象类

接口与类的区别:

  • 接口不能用于实例化对象。
  • 接口没有构造方法。
  • 接口中所有的方法必须是抽象方法。
  • 接口不能包含成员变量,除了 static 和 final 变量。
  • 接口不是被类继承了,而是要被类实现。
  • 接口支持多继承。

对象的多态性

(1)方法的重载和覆写。

(2)对象的多态性:1.向上转型:子类对象——》父类对象。2.向下转型:父类对象——》子类对象。

向上转型:使用父类对象接收子类实例(自动完成),生了向上转型,是父类对象,然后去调用那些父类中的方法,会发现,被调用的依然是子类中覆写过的方法,如果没有覆写过这些方法,则才会调用父类中的方法,调用子类独有的方法和属性就会报错了,

向下转型:使用子类对象接收父类对象,就是将父类对象变为子类对象(需要强制转型),在进行向下转型时,必须先进行向上转型,否则会出现类型转换异常(ClassCastException)。因为仅仅通过父类是无法判断某个类是否是其子类的,但是从子类中就可以直接通过extend关键字,直接明白其父类是谁,如果两个没有关系的对象之间进行转换就会发生此异常,

学习总结

这周是国庆假期,所以没这么去学习,假期过后刚开始写题不会动手,但我对照上周上课拍的题目照片又想起来一些,在题目中已经给出了写题的步骤,对照照片中老师已经写出的代码将题目写了出来,后面又看了书上的接口和多态性。这周是假期,学到的东西比较少,但内容却很重要,要继续加油。

原文地址:https://www.cnblogs.com/198266qq/p/11632027.html