第七周课程总结&实验报告(五)

实验报告(五)

一.实验目的

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

二.实验要求

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

三.实验内容

1.抽象类的使用

设计一个类层次,定义一个抽象类--形状,其中包括有求形状的面积的抽象方法。 继承该抽象类定义三角型、矩形、圆。 分别创建一个三角形、矩形、圆存对象,将各类图形的面积输出。
注:三角形面积s=sqrt(p(p-a)(p-b)*(p-c)) 其中,a,b,c为三条边,p=(a+b+c)/2

编译技巧:

  • 抽象类定义的方法在具体类要实现;
  • 使用抽象类的引用变量可引用子类的对象;
  • 通过父类引用子类对象,通过该引用访问对象方法时实际用的是子类的方法。可将所有对象存入到父类定义的数组中。

(1)实验代码:

抽象类以及三角型、矩形、圆的对象

package 测试;

public abstract class Shape {
	public abstract double getArea();
}

class Triangle extends Shape{
	private double a,b,c;
	
	public Triangle(double a, double b, double c) {
		this.a = a;
		this.b = b;
		this.c = c;
	}
	
	public double getArea() {
		double p=(a+b+c)/2;
		double area=Math.sqrt(p*(p-a)*(p-b)*(p-c));
		return area;
	}
	
}
	
class Rectangle extends Shape{
	private double a,b;
	
	public Rectangle(double a, double b) {
		this.a = a;
		this.b = b;
	}

	public double getArea() {
		double area=a*b;
		return area;
	}
	
}

class Circle extends Shape{
	private double r;

	public Circle(double r) {
		this.r = r;
	}

	public double getArea() {
		double area=Math.PI*r*r;
		return area;
	}
	
}

实验运行

package 测试;
import java.util.Scanner;
public class 测试0 {
	public static void main(String[] args) {
		Scanner num=new Scanner(System.in);
		System.out.println("请输入三角形的的边长:");
		double a=num.nextDouble();
		double b=num.nextDouble();
		double c=num.nextDouble();
		Shape triangle=new Triangle(a,b,c);
		System.out.println("三角形的面积为:"+triangle.getArea());
		System.out.println("");
		System.out.println("请输入矩形的长和宽:");
		double a1=num.nextDouble();
		double b1=num.nextDouble();
		Shape rectangle=new Rectangle(a1,b1);
		System.out.println("矩形的面积为:"+rectangle.getArea());
		System.out.println("");
		System.out.println("请输入圆的半径:");
		double r=num.nextDouble();
		Shape circle=new Circle(r);
		System.out.println("圆的面积为:"+circle.getArea());
	}

}

(2)实验运行结果截图:

(3)实验大致思路:

定义抽象类Shape,在其中定义获取形状的面积的抽象方法getArea();,然后分别定义三角形,矩形,圆形的对象,最后输出它们的数据并将它们的面积输出

(4)实验中遇到的问题:

题目不复杂,就是一开始编写的时候想放在一个文件里,它显示Shape抽象类必须在自己的文件中定义,新建一个文件就没问题了.

2.使用接口技术

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

编程技巧:

  • 接口中定义的方法在实现接口的具体类中要重写实现;
  • 利用接口类型的变量可引用实现该接口的类创建的对象。

(1)实验代码:

接口以及直线、圆的对象

package 测试;

public interface Shape {
	public void size();
}

class Line implements Shape{
	private double lenght;

	public Line(double lenght) {
		this.lenght = lenght;
	}

	public void size() {
		System.out.println("直线的长度为:"+lenght);
	}

}
class Circle implements Shape{
	private double r;

	public Circle(double r) {
		this.r = r;
	}

	public void size() {
		double lenght=2*r*Math.PI;
		double area=Math.PI*r*r;
		System.out.println("圆的半径为:"+r);
		System.out.println("圆的周长为:"+lenght);
		System.out.println("圆的的面积长度为:"+area);
	}

}

实验运行

package 测试;
import java.util.Scanner;


public class 测试0 {
	public static void main(String[] args) {
		Scanner num=new Scanner(System.in);
		System.out.println("请输入直线的长度:");
		double lenght=num.nextDouble();
		Shape line=new Line(lenght);
		line.size();
		System.out.println("请输入圆的半径:");
		double r=num.nextDouble();
		Shape circle=new Circle(r);
		circle.size();
	}
}

(2)实验运行结果截图:

(3)实验大致思路:

定义接口Shape,其中包括一个方法size();,然后定义直线还有圆的对象,输入它们的数据,并将直线的长度,圆的半径,周长,面积输出.

(4)实验中遇到的问题:

接口和抽象类还是很相像的,这2道题的思路基本一致,所以做起来很容易,没有出现什么问题

第七周课程总结

这周主要讲了抽象类与接口的运用,还有Object类的定义和基本方法

这周学习的内容:

1.抽象类与接口之间的关系

序号 区别点 抽象类 接口
1 定义 包含一个抽象方法的类 抽象方法和全局常量的集合
2 组成 构造方法、抽象方法、普通方法、常量、变量 常量、抽象方法
3 使用 子类继承抽象类(extends) 子类实现接口(implements)
4 关系 抽象类可以实现多个接口 接口不能继承抽象类,但允许继承多个接口
5 常见设计模式 模板设计 工厂设计、代理设计
6 对象 都通过对象的多态性产生实例化对象
7 局限 抽象类有单继承的局限 接口没有此局限
8 实际 作为一个模板 是作为一个标准或是表示一种能力
9 选择 如果抽象类和接口都可以使用的话,优先使用接口,因为避免单继承的局限
10 特殊 一个抽象类中可以包含多个接口,一个接口中可以包含多个抽象类

2.Object类

在Java中所有的类都有一个公共的父类就是Object类,一个类只要没有明显的继承一个类,则肯定是Object类的子类。如下两种代码表示的含义都是一样的:

class Person extends Object{}
class Person{}

Object类中的主要方法

序号 方法名称 类型 描述
1 public Object() 构造 构造方法
2 public boolean equals(Object obj) 普通 对象比较
3 public int hashCode() 普通 取得Hash码
4 public String toString() 普通 对象打印时调用

posted on 2019-10-11 09:27  噫~  阅读(275)  评论(1编辑  收藏  举报

导航