实验四                                     类的继承

A、实验目的

  • 理解抽象类与接口的使用;
  • 了解包的作用,掌握包的设计方法。

B、实验要求

  • 掌握使用抽象类的方法。
  • 掌握使用系统接口的技术和创建自定义接口的方法。
  • 了解 Java 系统包的结构。
  • 掌握创建自定义包的方法。

C、实验内容

(一)抽象类的使用

1、设计一个类层次,定义一个抽象类--形状,其中包括有求形状的面积的抽象方法。 继承该抽象类定义三角型、矩形、圆。 分别创建一个三角形、矩形、圆存对象,将各类图形的面积输出。

    注:三角形面积s=sqrt(p*(p-a)*(p-b)*(p-c)) 其中,a,b,c为三条边,p=(a+b+c)/2。

2、编程技巧

    (1)    抽象类定义的方法在具体类要实现;

    (2)    使用抽象类的引用变量可引用子类的对象;

    (3) 通过父类引用子类对象,通过该引用访问对象方法时实际用的是子类的方法。可将所有对象存入到父类定义的数组中。

实验代码:

package 第七周;

public abstract class Cx
{
    public abstract double print();
}



class Sanjiaxing extends Cx                        // 继承抽象类,  三角形
{
    private double a;
    private double b;
    private double c;

    public Sanjiaxing(double a, double b, double c)
    {
        this.a = a;
        this.b = b;
        this.c = c;
    }

    public double print()                           // 调用抽象方法
    {
        double p = (a + b + c) / 2;
        return Math.sqrt(p * (p - a) * (p - b) * (p - c));
    }
}




class Juxing extends Cx                        // 继承抽象类,  矩形
{
    private double length;
    private double width;
    private double height;

    public Juxing(double length, double width, double height)
    {
        this.length = length;
        this.height = height;
        this.width = width;
    }

    public double print()
    {
        return length * width * height;

    }
}



class Yuan extends Cx             // 继承抽象类,  圆
{
    double bj;                    // 定义圆的半径

    public Yuan(double radious)
    {
        this.bj = radious;
    }

    public double print()
    {
        return Math.PI * bj * bj;
    }
}
package 第七周;

public class Mianji
{
    public static void main(String[] args)
    {

        Cx x = new Sanjiaxing(5, 12, 13);
        Cx y = new Juxing(9, 8,7);
        Cx z = new Yuan(6);

        System.out.println("边为5, 12, 13的三角形的面积为                 :  " + x.print());
        System.out.println("\n长为9、宽为8、高为7 的矩形的面积为  :  " + y.print());
        System.out.println("\n半径为6的圆的面积为                           :  " + z.print());
    }
}

实验截图:

错误截图:


改正:一开始不太明白,提示也不太懂,后面参考书上代码才发现定义的抽象方法不合后续,将public abstract double println();改为public abstract double print();就可以了。

正确截图:

(二)使用接口技术

1、定义接口Shape,其中包括一个方法size(),设计“直线”、“圆”、类实现Shape接口。分别创建一个“直线”、“圆”对象,将各类图形的大小输出。

2、编程技巧

    (1) 接口中定义的方法在实现接口的具体类中要重写实现;

    (2) 利用接口类型的变量可引用实现该接口的类创建的对象。

实验代码:

package 第七周;

public interface Shape                                 // 定义接口Shape,其中包括一个方法size()
{
    public abstract void size();                       // 定义抽象方法 size()
}

class Zhixian implements Shape                        // 子类实现Shape接口,直线
{
    private double cd;

    public Zhixian(double cd)
    {
        this.cd = cd;
    }

    public void size()                                 // 覆写Shape接口的抽象方法
    {
        System.out.println("                                   长度为99的直线:\n\n"+"直线的大小:" + cd+"\n\n\n");
    }
}

class Yuanquan implements Shape                        // 子类实现Shape接口,圆
{
    private double Bj;

    public Yuanquan(double Bj)
    {
        this.Bj = Bj;
    }

    public void size()
    {
        System.out.println("                                   半径为4的圆:\n\n圆半径的大小:" + Bj);
        System.out.println("\n圆周长的大小:" + Math.PI * Bj * 2);
        System.out.println("\n圆面积的大小:" + Math.PI * Bj * Bj);

    }
}
package 第七周;

public class Daxiao
{
    public static void main(String[] args)
    {
        Shape s1=new Zhixian(99);
        Shape s2=new Yuanquan(4);
        s1.size();                      //分别调用接口定义的方法
        s2.size();
    }
}

实验截图:

错误:暂无,基本仿照书本知识点运用。


                                         课程总结

继上周通过 实列分析———宠物商店 已学完抽象类与接口的基本知识点,并且通过熟悉和练习,已经大概学会与理解其各自妙用与区别、各特点的不同。本周则主要学习了Object类的基本作用与其包括的主要方法,我们可以通过学习其已有方法更便捷书写代码。

抽象类与接口:
Object主要方法:
Object类的常用方法


参考:Object

02-13 17:57