实验四 类的继承

实验目的

理解抽象类与接口的使用;

了解包的作用,掌握包的设计方法。

实验要求

掌握使用抽象类的方法。

掌握使用系统接口的技术和创建自定义接口的方法。

了解 Java 系统包的结构。

掌握创建自定义包的方法。

实验内容

(一)抽象类的使用

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

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

2.编程技巧

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

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

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

  1. package Zuoye4;
  2. abstract class shapes {
  3. public abstract double print();
  4. }
  5. class Triangle extends shapes {
  6. private double a;
  7. private double b;
  8. private double c;
  9. public Triangle(double a,double b,double c){
  10. this.a=a;
  11. this.b=b;
  12. this.c=c;
  13. }
  14. public double print() {
  15. double p=(a+b+c)/2;
  16. return Math.sqrt(p*(p-a)*(p-b)*(p-c));
  17. }
  18. }
  19. class Rectangle extends shapes {
  20. private double w;
  21. private double h;
  22. public Rectangle(double w, double h){
  23. this.h=h;
  24. this.w=w;
  25. }
  26. public double print() {
  27. return w*h;
  28. }
  29. }
  30. class Circular extends shapes {
  31. double r;
  32. public Circular(double r){
  33. this.r=r;
  34. }
  35. public double print() {
  36. return r*r*Math.PI;
  37. }
  38. }
  39. public class Tuxing{
  40. public static void main(String[] args){
  41. shapes Triangle=new Triangle(3,4,5);
  42. shapes Rectangle=new Rectangle(4,3);
  43. shapes Circular=new Circular(5);
  44. System.out.println("三角形的面积: "+Triangle.print());
  45. System.out.println("矩形的面积: "+Rectangle.print());
  46. System.out.println("圆的面积: "+Circular.print());
  47. }
  48. }





(二)使用接口技术

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

编程技巧

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

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

  1. package Zuoye4;
  2. import java.util.Scanner;
  3. interface Shapes{
  4. public double size();
  5. }
  6. class spot implements Shapes{
  7. private double x1,x2,y1,y2;
  8. public spot(double x1,double x2,double y1,double y2) {
  9. this.x1=x1;
  10. this.x2=x2;
  11. this.y1=y1;
  12. this.y2=y2;
  13. }
  14. public double size() {
  15. return Math.sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
  16. }
  17. }
  18. class Circular implements Shapes{
  19. private double reidus;
  20. public Circular(double reidus) {
  21. this.reidus=reidus;
  22. }
  23. public double size() {
  24. return Math.PI*this.reidus*this.reidus;
  25. }
  26. }
  27. public class Tuxing{
  28. public static void main(String args[]) {
  29. Scanner spot=new Scanner(System.in);
  30. System.out.println("请输入两点的坐标");
  31. double x1=spot.nextDouble();
  32. double y1=spot.nextDouble();
  33. double x2=spot.nextDouble();
  34. double y2=spot.nextDouble();
  35. spot line=new spot(x1,y1,x2,y2);
  36. System.out.println("直线的大小为:"+line.size());
  37. Scanner c=new Scanner(System.in);
  38. System.out.println("请输入圆的半径");
  39. double reidus=c.nextDouble();
  40. Circular circle=new Circular(reidus);
  41. System.out.println("圆的大小为:"+circle.size());
  42. return;
  43. }
  44. }

学习总结

(1)抽象类与接口的应用。

抽象类的实际应用-------模板设计(abstract)

接口的实际应用-------制定标准(interface)

(2)Object类

tostring方法

equals方法

(3)异常

1,数组超出绑定异常:ArrayIndexOutOfBoundsException.

2,数字格式化异常:NumberFormatException.

3,算术异常:ArithmeticException.

try{ //有可能出现异常的语句

}catch(异常类 异常对象){ //编写异常的处理语句

}finally{

一定会运行到的程序代码

}

4.异常类的继承结构

在JAVA中所有捕获范围小的异常必须放在捕获大的异常之前,否则程序在编译时会出现错误提示。

(4)关键字throws

public 返回值类型 方法名称(参数列表.....)throws 异常类{ }

第七周作业&实验报告5的更多相关文章

  1. 第七周总结&实验报告5

    这一周的课程内容比较难,而且比较不容易理解,所有学习的很吃力,现在接触的知识越来越多,也越来越难了,还是要多对照书本来进行学习! 这周主要学的有: 一.抽象类 1.Java中可以创建一种类专门用来当作 ...

  2. 第六周作业&实验报告四

    一.实验目的 (1)掌握类的继承 (2)变量的继承和覆盖,方法的继承,重载和覆盖的实现: 二.实验的内容 (1)根据下面的要求实现圆类Circle. 1.圆类Circle的成员变量:radius表示圆 ...

  3. 2018-2019-1 20189221 《Linux内核原理与分析》第七周作业

    2018-2019-1 20189221 <Linux内核原理与分析>第七周作业 实验六 分析Linux内核创建一个新进程的过程 代码分析 task_struct: struct task ...

  4. 2017-2018-1 20179205《Linux内核原理与设计》第七周作业

    <Linux内核原理与设计>第七周作业 视频学习及操作分析 创建一个新进程在内核中的执行过程 fork.vfork和clone三个系统调用都可以创建一个新进程,而且都是通过调用do_for ...

  5. 2019-2020-1 20199329《Linux内核原理与分析》第七周作业

    <Linux内核原理与分析>第七周作业 一.本周内容概述: 对Linux系统如何创建一个新进程进行追踪 分析Linux内核创建一个新进程的过程 二.本周学习内容: 1.学习进程的描述 操作 ...

  6. 2020-2021-1 20209307《Linux内核原理与分析》第七周作业

    这个作业属于哪个课程 <2020-2021-1Linux内核原理与分析)> 这个作业要求在哪里 <2020-2021-1Linux内核原理与分析第七周作业> 这个作业的目标 & ...

  7. 2017-2018-1 我爱学Java 第六七周 作业

    团队六七周作业 完善版需求规格说明书 制定团队编码规范 数据库设计 后端架构设计 TODOList 参考资料 完善版需求规格说明书 <需求规格说明书>初稿不足之处: 1.开发工具写错 2. ...

  8. 2017-2018-1 JAVA实验站 第六、七周作业

    2017-2018-1 JAVA实验站 第六.七周作业 详情请见团队博客

  9. 2017-2018-1 JaWorld 第六、七周作业

    2017-2018-1 JaWorld 第六.七周作业 修改需求规格说明书 上次的<需求规格说明书>初稿有哪些不足? 王译潇同学回答:   1. 引言和目的性考虑的不是很周全.   2. ...

随机推荐

  1. JQ其他

    关于页面元素的引用 通过jquery的$()引用元素包括通过id.class.元素名以及元素的层级关系及dom或者xpath条件等方法,且返回的对象为jquery对象(集合对象),不能直接调用dom定 ...

  2. 判断当前环境是ios还是安卓

    /** * @name 判断iOS */ export const isiOS = ()=>{ let u = navigator.userAgent; let iOs = !!u.match( ...

  3. IE浏览器如何实现断点续传

    需求: 支持大文件批量上传(20G)和下载,同时需要保证上传期间用户电脑不出现卡死等体验: 内网百兆网络上传速度为12MB/S 服务器内存占用低 支持文件夹上传,文件夹中的文件数量达到1万个以上,且包 ...

  4. git多人参与的项目 -> 分支代码如何合并到主干

    个人理解:合并分支时候就是当前分支,与别的分支先合并一遍,然后解决分支中存在的所有冲突,之后将本地分支代码提交到git远程仓库,之后切换主干分支 ,将主干分支与分支内容合并,解决冲突, 在提交主干分支 ...

  5. springboot 项目中在普通类中调用dao层的mapper 出现空指针异常

    项目中我遇到同样的问题 特记载一下 有两种方式 一. 该类使用@Component注解 添加一个本类类型的静态字段 创建一个初始化方法,贴上@PostConstruct 标签,用于注入bean 创建方 ...

  6. Struts2拦截器和过滤器的区别?

    ①过滤器依赖于Servlet容器,而拦截器不依赖于Servlet容器. ②Struts2 拦截器只能对Action请求起作用,而过滤器则可以对几乎所 有请求起作用. ③拦截器可以访问 Action上下 ...

  7. C++入门经典-例2.17强制类型转换

    1:代码如下: // 2.17.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> using ...

  8. vue一些注意事项

    1.生命周期钩子的 this 上下文指向调用它的 Vue 实例. 不要在选项属性或回调上使用箭头函数,比如 created: () => console.log(this.a) 或 vm.$wa ...

  9. LeetCode 79. 单词搜索(Word Search)

    题目描述 给定一个二维网格和一个单词,找出该单词是否存在于网格中. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格.同一个单元格内的字母不允许被 ...

  10. npm安装 syscall access

    npm WARN deprecated bower@1.8.4: We don't recommend using Bower for new projects. Please consider Ya ...