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

原文地址:https://www.cnblogs.com/521-PENG/p/11657535.html