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

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

课程总结:

这一周主要学习的知识点是抽象类的设计应用——模板设计。这个模板类就是在子类调用的方法里面共同的,给其一个标准,让其按照这个标准进行操作,当然了,在子类里面特有的还是要重新定义,不能就不定义了,但是模板里面的共有的,在子类里面只需要实现父类中的抽象方法,就可以取得一个具体的信息;更加形象的说模板,如果说把模板比作一张请空白的假条,那么请假人就需要填写相关的个人信息,而不需要在重新创造一种新的格式。

第二个知识点就是接口的实际应用——制定标准。个人感觉这个接口其实和抽象类实际应用很类似,给定一个接口,给出方法,在子类覆写给出的方法,最后实例化,调用方法;

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

实验报告:

(一)抽象类的使用

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

抽象父类

package shyfive;

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

三角形类

package shyfive;

public class Demo2 extends Dome1 {

	private double a;
	private double b;
	private double c;
	public Demo2(double a,double b,double c) {
		this.a=a;
		this.b=b;
		this.c=c;
	}
	public double getA() {
		return a;
	}
	public void setA(double a) {
		this.a = a;
	}
	public double getB() {
		return b;
	}
	public void setB(double b) {
		this.b = b;
	}
	public double getC() {
		return c;
	}
	public void setC(double c) {
		this.c = c;
	}
	
	public double getP() {
		double p=((a+b+c)/2);
		return p;
	}
	public double getArea() {
		double area=Math.sqrt(getP()*(getP()-a)*(getP()-b)*(getP()-c));
		return area;
	}
}

矩形类

package shyfive;

public class Demo3 extends Dome1 {

	private double length;
	private double width;
	
	public Demo3(double length,double width) {
		this.length=length;
		this.width=width;
	}

	public double getLength() {
		return length;
	}

	public void setLength(double length) {
		this.length = length;
	}

	public double getWidth() {
		return width;
	}

	public void setWidth(double width) {
		this.width = width;
	}
	public double getArea() {
		double area2=getLength()*getWidth();
		return area2;
	}
}

圆类

package shyfive;

public class Demo4 extends Dome1 {
	private double radius;
	
	public Demo4(double radius) {
		this.radius = radius;
	}

	public double getRadius() {
		return radius;
	}

	public void setRadius(double radius) {
		this.radius = radius;
	}
	public double getArea() {
		double area=Math.pow(radius,2)*3.14;
		return area;
	}

}

测试类

package shyfive;

public class Test {

	public static void main(String[] args) {
		Demo2 str1=new Demo2(3,4,5);
		Demo3 str2=new Demo3(5,7);
		Demo4 str4=new Demo4(5);
		System.out.println("三角形面积:"+str1.getArea());
		System.out.println("矩形面积:"+str2.getArea());
		System.out.println("圆面积:"+str4.getArea());
	}
}


在编写程序的时候,遇到的问题,起初没有弄懂父类里面公共的属性,到底要怎样才能实现让每一个子类都能用到,起初是想在父类里面直接把方法定义了,后来操作困难,然后就去百度里面找了相关方法,发现直接定义一个面积的抽象方法就可以了,具体的运算和操作到子类里面实现;还有一个问题就是,定义了一个抽象类父类,在继承的时候刚开始会给你报错,让你改成一个抽象类,但是改了之后你会发现,在测试类里面,进行实例化的时候,总是会显示一个错误,就是不能实例化,后来把子类的抽象词去除了,结果测试类里面就能够进行实例化;但是怎样去解决加了抽象词,并且也能够实例化的问题,还在查找中。

(二)接口技术

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

接口

package shyfive;

interface Shape{
	public void size();
}

子类圆和直线

class Circle implements Shape{
	private double radius;
	
	 public Circle(double radius) {
		this.radius=radius;
	}
	public double getRadius() {
		return radius;
	}
	public void setRadius(double radius) {
		this.radius = radius;
	}

	public double getArea() {
		double area=Math.pow(radius,2)*3.14;
		return area;
	}
	public void size() {
		System.out.println("圆的大小:"+getArea());
	}
}
	
 class Segment implements Shape{
	private double length;
	
	public Segment(double length) {
		this.length=length;
	}

	public double getLength() {
		return length;
	}

	public void setLength(double length) {
		this.length = length;
	}
	public double getHigh() {
		double high=length;
		return high;
	}
	public void size() {
		System.out.println("直线长度:"+getHigh());
	}
}

测试类

public class Demo5 {

	public static void main(String[] args) {
		Shape str1=new Circle(5);
		Shape str2=new Segment(9);
		str1.size();
		str2.size();
	}

}

这一个题,是接口的问题,接口的知识老师只讲了第一个例子,所有不是很清楚,但是根据书本上的设计模式——工厂设计里面得到了思路,我就想,它定义了一个方法之后,我在子类里面进行操作的时候,可不可以给它在加一些其它的东西进行输出,事实证明是可以的,但是我不确定这是不是符合要求,但是还是得到了结果。

原文地址:https://www.cnblogs.com/lyl68/p/11649810.html