2019JAVA第五次实验报告

Java实验报告

班级 计科二班 学号 20188442 姓名 吴怡君
完成时间2019/10/11

评分等级

实验四 类的继承

实验目的

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

实验要求

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

实验内容

(一)抽象类的使用

  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) 接口中定义的方法在实现接口的具体类中要重写实现;

(2) 利用接口类型的变量可引用实现该接口的类创建的对象。
实验过程(请自己调整格式)
(一)抽象类的使用

(1)实验代码

package Domon4;

public abstract class Shape {
    public abstract void talkArea();
}

 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))); 
    } 
} 
 
  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); 
        } 
         
    } 
      
      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 Domon4;

import java.util.Scanner;

public class test {

        public static void main(String[] args) { 
            
            for(int i=0;i<100;i++){
            Scanner input=new Scanner(System.in); 
            System.out.println("依次输入三角形三条边:"); 
            int a=input.nextInt(); 
            int b=input.nextInt();
            int c=input.nextInt();
            Shape Triangle = new Triangle(a, b, c); //通过父类引用子类对象
            Triangle.talkArea(); 
            
            System.out.println("分别输入矩形的长和高:"); 
            int length=input.nextInt(); 
            int hight=input.nextInt();
            Shape Rectangle = new Rectangle(length,hight); //通过父类引用子类对象
            Rectangle.talkArea(); 
            
            System.out.println("输入圆形的半径:"); 
            int r=input.nextInt();
            Shape Circle = new Circle(r); //通过父类引用子类对象
            Circle.talkArea(); 
            }
        }
    }

(2)运行结果

2019JAVA第五次实验报告_第1张图片

(3)小题总结

这个编程题主要学习了抽象类的使用,以及以前的父类与子类的继承,还有考察了多态性,总体来说是一道有一定水平的题目,但是只要每个知识点学好了解决这个问题还是比较轻松的,这道题让我也知道了自己的不足,因为刚写这道题目的时候,思路还是比较混乱的,就是因为这些知识点不太熟练,不过好在后来慢慢理解了,并且认真做会发现有些东西很有趣,这些编程语言有很多语法都是相通的,所以学起来更加有兴趣,并且自己在测试的时候加了一个for循环发现比不加效果要好很多,这可以一次性测试完所有的考察点,总体来说,感觉还是很不错,继续努力吧,进步空间还很大。

(二)使用接口技术

(1)实验代码

package Domon4接口;

public interface Shape {
    public abstract double size(); 
    public abstract  void talk(); 
}

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()); 
         
    } 
      
} 

 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 Domon4接口;

public class test {
    
         
        public static void main(String[] args) { 
            Shape line=new Line(6);        //实例化子类对象
            line.talk();        //调用被覆写过的方法
            Shape circle=new Circle(2);        //实例化子类对象
            circle.talk();        //调用被覆写过的方法
        } 
     
    } 

(2)运行结果

2019JAVA第五次实验报告_第2张图片

(3)小题总结

这道题目主要是考察了接口,需要知道接口的定义,接口里面只有抽象方法和全局常量,且它的作用一般在企业开发产品中作为标准来生产互补产品,所以要掌握好这个知识点,同样也是重点,给我的感觉是在做某些东西上方便了很多。

课程总结

一、
(1)本次实验属于抽象类和接口的学习,感觉内容还挺不错,对于应用性可能会比较实用,学起来感觉掌握有限,需要继续深层次学习。
抽象类与接口的区别:
一般的来说从全局观来看接口比抽象类更加方便,因为局限性小,比如接口可有多个抽象类,对于产品研发有很大的优势。
但是接口里面只能有抽象方法和全局常量,这也是它的缺点,因为有些开发还必须用到其他的一些方法和变量,所以各有优势,但是总的来说能优先选的话,先考虑接口,因为避免单继承的局限。

(2)本周学习了抽象类的基本概念、接口的基本概念、对象的多态性、instanceof关键字、抽象类abstract和接口的应用中的为抽象类与接口实例化、抽象类的实际应用——模板实际、接口的实际应用——制定标准,都在课堂上有了初步的认识,还需课余巩固深入,当然后面还介绍了几种设计模式——工厂设计、代理设计、适配器设计等等。
二、
对象的多态性主要分为以下两种类型:
(1)向上转型:子类对象---->父类对象(自动转型)。
(2)向下转型:父类对象---->子类对象(强制转型)
三、
(1)object关键词:Object类是一个特殊的类,是所有类的父类,如果一个类没有用extends明确指出继承于某个类,那么它默认继承Object类。
(2)object类的主要方法
(2.1)toString();
(2.2)equals();
(2.3) hashCode();

你可能感兴趣的