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

    特殊

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

第五次java实验报告的更多相关文章

  1. 20145334 第五次 java 实验报告

    实验内容 1.掌握Socket程序的编写: 2.掌握密码技术的使用: 3.设计安全传输系统. 我和20145306张文锦组队编程 http://www.cnblogs.com/besti145306/ ...

  2. Java实验报告五:Java网络编程及安全

    Java实验报告五:Java网络编程及安全                                                                               ...

  3. 20135231 JAVA实验报告三:敏捷开发与XP实践

    ---恢复内容开始--- JAVA实验报告三:敏捷开发与XP实践 20135231 何佳 实验内容 1. XP基础 2. XP核心实践 3. 相关工具 实验要求 1.没有Linux基础的同学建议先学习 ...

  4. 第七次java实验报告

    Java实验报告 班级 计科二班 学号20188437 姓名 何磊 完成时间 2019/10/25 评分等级 实验四 类的继承 实验内容 )总票数1000张:(2)10个窗口同时开始卖票:(3)卖票过 ...

  5. 第五周总结&实验报告三

    第五周总结&实验报告三 实验报告 1.已知字符串:"this is a test of java".按要求执行以下操作:(要求源代码.结果截图.) ① 统计该字符串中字母s ...

  6. Java实验报告二:Java面向对象程序设计

    Java实验报告二:Java面向对象程序设计                                                                               ...

  7. 20145203盖泽双:Java实验报告二

    Java实验报告二:Java面向对象程序设计 实验要求: 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 实验内容 ...

  8. 20155310第一周JAVA实验报告

    20155310第一周JAVA实验报告 实验内容 1.使用JDK编译.运行简单的Java程序: 2.使用Eclipse 编辑.编译.运行.调试Java程序. 实验要求 使用JDK和IDE编译.运行简单 ...

  9. 20145310第一周JAVA实验报告

    20145310第一周JAVA实验报告 实验内容 1.使用JDK编译.运行简单的Java程序: 2.使用Eclipse 编辑.编译.运行.调试Java程序. 实验要求 使用JDK和IDE编译.运行简单 ...

随机推荐

  1. jcc

    常用的jcc指令表

  2. SSM跨域配置

    1.后台跨域要引用两个jar包(cors-filter-1.7.jar.java-property-utils-1.9.jar) 提供下载地址: 链接: https://pan.baidu.com/s ...

  3. ueditor编辑器+粘贴word

    最近公司做项目需要实现一个功能,在网页富文本编辑器中实现粘贴Word图文的功能. 我们在网站中使用的Web编辑器比较多,都是根据用户需求来选择的.目前还没有固定哪一个编辑器 有时候用的是UEditor ...

  4. 初识 ZeroMQ

    由于网上和官方的ZeroMQ主要是讲解和说明大都是基于C.PHP.Java偏偏.Net的很少,可能你看完80多页的官方文档仍被C代码搞的晕晕乎乎的,我这里就将资料收集整理成几篇博文同时用c#重新实现D ...

  5. AutoItLibrary测试Windows GUI

    AutoItLibrary库关键字 AutoItLibrary 的对象操作大体上有几大主要部分,Window 操作.Control 操作.Mouse 操作.Process操作.Run 操作.Reg 操 ...

  6. Hibernate3核心API-Configuration类

  7. Cookie类

    Cookie类:用于存储会话数据 1)构造Cookie对象 Cookie(java.lang.String name, java.lang.String value) 2)设置cookie void ...

  8. python对列表中名字进行修改,在每个名字后面加入‘the Great’

    第一种方法:使用enumerate函数 def make_great(magicians): for i ,name in enumerate(magicians): magicians[i] = m ...

  9. 算法之顺序、二分、hash查找

    算法之顺序.二分.hash查找   一.查找/搜索 - 我们现在把注意力转向计算中经常出现的一些问题,即搜索或查找的问题.搜索是在元素集合中查找特定元素的算法过程.搜索通常对于元素是否存在返回 Tru ...

  10. Bat:Basic knowledge(同时运行多条命令,连接SqlServer执行sql,单个bat打开多个tomcat,cmd切换命令行编码,根据PID结束端口号)

    1.Windows7环境下命令行一次运行多条命令 Windows7命令行(cmd)下,如果想一次运行多条命令可能用到的连接符个人了解到的有三个:&&,||和&. aa & ...