• 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)运行结果

    (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)运行结果

    (3)小题总结

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

    课程总结

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

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

  • 相关阅读:
    linux入门学习
    qt 常见问题记录
    我今年,二十七八岁了
    C#程序如何实现设置系统WIFI共享
    主界面设计(收集)
    Qt中如何添加ICON图标
    系统登录界面(收集)
    Qt类型转换
    qt 系统设计对比
    Qt中丰富的容器类数组QVector、链表QLinkedList、映射表QMap、哈希表QHash
  • 原文地址:https://www.cnblogs.com/521-PENG/p/11657535.html
Copyright © 2020-2023  润新知