zoukankan      html  css  js  c++  java
  • 第五次java实验报告

    Java实验报告

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

    完成时间2019/10/10

    评分等级

    实验四 类的继承

    1. 实验目的
      1. 理解抽象类与接口的使用;
      2. 了解包的作用,掌握包的设计方法。
    2. 实验要求
      1. 掌握使用抽象类的方法。
      2. 掌握使用系统接口的技术和创建自定义接口的方法。
      3. 了解 Java 系统包的结构。
      4. 掌握创建自定义包的方法。

     

    1. 实验内容

      (一)抽象类的使用

      1. 设计一个类层次,定义一个抽象类--形状,其中包括有求形状的面积的抽象方法。 继承该抽象类定义三角型、矩形、圆。 分别创建一个三角形、矩形、圆存对象,将各类图形的面积输出。
          注:三角形面积s=sqrt(p*(p-a)*(p-b)*(p-c)) 其中,a,b,c为三条边,p=(a+b+c)/2

    2.编程技巧

    (1)    抽象类定义的方法在具体类要实现;
    			
    (2)    使用抽象类的引用变量可引用子类的对象;
    			

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

    (二)使用接口技术

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

    1. 编程技巧

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

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

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

      (一)抽象类的使用

      (1)实验代码

      package抽象类的使用;

      public abstract class Shape {

          public abstract void talkArea(); //定义抽象方法

          

      }

       

      package抽象类的使用;

      public class Triangle extends Shape{

          private double a,b,c,p; //三角形三条边和公式常量

            

          

          public Triangle(int a,int b,int c){

              if(a>0&&b>0&&c>0&&a+b>c&&a+c>b&&b+c>a){ //判断参数是否满足构成三角形的条件

                  this.a=a;

                  this.b=b;

                  this.c=c;

              }

              else{

                  System.out.println("参数不能构成三角形");

              }

          }

          public double getA() {

              return a;

          }

          public double getB() {

              return b;

          }

          public double getC() {

              return c;

          }

          public void talkArea() {

              p=(a+b+c)/2;

              if(a>0&&b>0&&c>0&&a+b>c&&a+c>b&&b+c>a) //判断参数是否满足构成三角形的条件

              System.out.println("三角形面积:"+ Math.sqrt(p*(p-a)*(p-b)*(p-c)));

          }

      }

       

      package抽象类的使用;

      public class Rectangle extends Shape{

          private double length,hight; //矩形的长和宽

          

          public Rectangle(double length,double hight){

              if(length>0&&hight>0){ //判断参数是否满足构成矩形的条件

                  this.hight=hight;

                  this.length=length;

              }

              else{

                  System.out.println("参数不能构成矩形");

              }

          }

          public double getLength() {

              return length;

          }

          public double getHight() {

              return hight;

          }

          public void talkArea() {

              if(length>0&&hight>0) //判断参数是否满足构成三角形的条件

              System.out.println("矩形面积:"+length*hight);

          }

          

      }

       

      package抽象类的使用;

      public class Circle extends Shape{

          private double radius; //圆的半径

          public Circle(double radius){

              if(radius>0){ //判断参数是否满足构成圆的条件

                  this.radius=radius;

              }

              else{

                  System.out.println("参数不能构成圆形");

              }

          }

          

          public double getRadius() {

              return radius;

          }

          public void talkArea() {

              if(radius>0) //判断参数是否满足构成圆的条件

              System.out.println("圆形面积:"+radius*radius*Math.PI);

          }

          

      }

      package抽象类的使用;

      public class test {

          public static void main(String[] args) {

              Shape Triangle = new Triangle(10, 4, 5); //通过父类引用子类对象

              Triangle.talkArea();    

              Shape Rectangle = new Rectangle(-2,2); //通过父类引用子类对象

              Rectangle.talkArea();

              Shape Circle = new Circle(-3); //通过父类引用子类对象

              Circle.talkArea();

          }

      }

      运行结果:

      package抽象类的使用;

      public class test {

          public static void main(String[] args) {

              Shape Triangle = new Triangle(3, 4, 5); //通过父类引用子类对象

              Triangle.talkArea();    

              Shape Rectangle = new Rectangle(2,2); //通过父类引用子类对象

              Rectangle.talkArea();

              Shape Circle = new Circle(3); //通过父类引用子类对象

              Circle.talkArea();

          }

      }

      运行结果:

      (2)代码截图

      (二)使用接口技术

      (1)实验代码

      package使用接口技术;

      interface Shape {

          double size(); //等价于:public abstract double size();

          void talk(); //等价于:public abstract void talk();

      }

       

      package使用接口技术;

      class Line implements Shape {

          public double length;        //直线的长度

          

          Line(double length){ //定义构造方法

              this.length=length;

          }

          

          public double size() {        //覆写接口Shape中的抽象方法

              return length;

          }

          public void talk() { //覆写接口Shape中的抽象方法

              System.out.println("直线的长:"+size());

              

          }

            

          

      }

       

      package使用接口技术;

      public class Circle implements Shape {

          public double radius;        //圆的半径

          

          Circle(double radius){        //定义构造方法

              this.radius=radius;

          }

          

          public double size() {        //覆写接口Shape中的抽象方法

              return radius*radius*Math.PI;

          }

          public void talk() {        //覆写接口Shape中的抽象方法

              System.out.println("圆的面积:"+size());

              

          }

      }

       

      package使用接口技术;

      public class test {

          public static void main(String[] args) {

              Shape line=new Line(5);        //实例化子类对象

              line.talk();        //调用被覆写过的方法

              Shape circle=new Circle(5);        //实例化子类对象

              circle.talk();        //调用被覆写过的方法

          }

      }

      运行结果:

      (2)代码截图

      1. 结论

      本次实验属于抽象类和接口中较简单的应用,完成的很顺利,还需要做一些更有挑战的题目以巩固此类知识。

      本周学习了抽象类的基本概念、接口的基本概念、对象的多态性、instanceof关键字、抽象类和接口的应用中的为抽象类与接口实例化、抽象类的实际应用——模板实际、接口的实际应用——制定标准,都在课堂上有了初步的认识,还需课余巩固深入,并预习设计模式——工厂设计。

      对象的多态性主要分为以下两种类型:

      1)向上转型:子类对象父类对象。

      2)向下转型:父类对象子类对象

      对于向上转型,程序会自动完成,而对于向下转型时,必须明确的指明要转型的子类类型。

      对象转型的格式:

      对象向上转型:父类父类对象=子类实例;

      对象向下转型:子类子类对象=(子类)父类实例;

      序号

      区别点

      抽象类

      接口

      1

      定义

      包含一个抽象方法的类

      抽象方法和全局变量的集合

      2

      组成

      构造方法、抽象方法、普通方法、常量、变量

      常量、抽象方法

      3

      使用

      子类继承抽象类(extends

      子类实现接口(implements

      4

      关系

      抽象类可以实现多个接口

      接口不能继承抽象类,但允许继承多个接口

      5

      常见设计模式

      模板设计

      工厂设计、代理设计

      6

      对象

      都通过对象的多态性产生实例化对象

      7

      局限

      抽象类有单继承的局限

      接口没有单继承的局限

      8

      实际

      作为一个模板

      是作为一个标准或是表示一种能力

      9

      选择

      如果抽象类和接口都可以使用的话,优先使用接口,因为避免单继承的局限

      10

      特殊

      一个抽象类中可以包含多个接口,一个接口中可以包含多个抽象类

  • 相关阅读:
    QuickPart
    C#在Word文档指定位置增加内容
    不同linux操作系统的内存管理及安全性
    团队作业(五):冲刺总结7
    团队作业(五):冲刺总结1
    信息安全系统设计与实现:第十四章学习笔记
    电子公文传输系统个人贡献
    OpenEuler 中C与汇编的混合编程
    团队作业(五):冲刺总结2
    OpenEuler 中C语言中的函数调用测试
  • 原文地址:https://www.cnblogs.com/hlywzj/p/11649727.html
Copyright © 2011-2022 走看看