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

实验四 类的继承

实验目的

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

实验要求

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

实验内容

(一)抽象类的使用

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

(1) 抽象类定义的方法在具体类要实现;

(2) 使用抽象类的引用变量可引用子类的对象;

(3) 通过父类引用子类对象,通过该引用访问对象方法时实际用的是子类的方法。可将所有对象存入到父类定义的数组中。

形状类抽象方法

package hello.java;

public  abstract  class shape  {

public   abstract  double getArea();




public static void main(String[] args) {
shape a[]=new shape[3];
       a[0] = new Yuan(1);
           a[1] = new Juxing(2,3);
           a[2] = new Triangle(4,5,6);		


 for (int i=0;i<=2;i++)                 
 {
      System.out.println(a[i].getArea());
 }
 }

 }

三角形类

package hello.java;
import java.util.Scanner;
public class Triangle  extends shape {
private   double edge1;
private   double edge2;
private   double edge3;
public double getEdge1() {
	return edge1;
}
public void setEdge1(double edge1) {
	this.edge1 = edge1;
}
public double getEdge2() {
	return edge2;
}
public void setEdge2(double edge2) {
	this.edge2 = edge2;
}
public double getEdge3() {
	return edge3;
}
public void setEdge3(double edge3) {
	this.edge3 = edge3;
}


public   Triangle(double a,double b,double c)
{
	edge1=a;
	edge2=b;
	edge3=c;
}




public double getArea() {

	double p;
	p=(edge1+edge2+edge3)/2;
	return Math.sqrt(p*(p-edge1)*(p-edge2)*(p-edge3));
			
}


public static void main(String[] args) {
Scanner sc=new Scanner (System.in);
System.out.println("请输入边1");
double  edge1= sc.nextDouble();
System.out.println("请输入边2");
double  edge2= sc.nextDouble();
System.out.println("请输入边3");
double  edge3= sc.nextDouble();
Triangle d=new Triangle(edge1, edge2, edge3);
  System.out.println("面积" +d.getArea());	
}

}

矩形类

package hello.java;
import java.util.Scanner;
public class Juxing  extends shape{
private static  double length;
private static  double width;
public Juxing(double a,double b)
{
	length=a;
	width=b;
}

public static double getLength() {
	return length;
}

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

public static double getWidth() {
	return width;
}

public static void setWidth(double width) {
	Juxing.width = width;
}





public double getArea() {
	
	return length*width;
}



 public static void main(String[] args) {

Scanner sc=new Scanner (System.in);
System.out.println("请输入长度");
double  length= sc.nextDouble();
System.out.println("请输入宽度");
double  width= sc.nextDouble();
Juxing c=new Juxing(length, width);

System.out.println("面积" +c.getArea());

}
}

圆类

package hello.java;
import java.util.Scanner;
public class Yuan extends shape {
private static  double radius;
public  Yuan(double r)
{
	radius=r;
}

public static double getRadius() {
	return radius;
}
public static void setRadius(double radius) {
	Yuan.radius = radius;
}
public double getArea() 
{
	return Math.PI*Math.pow(radius,2);
}

public static void main(String[] args) {
	
	Scanner sc=new Scanner (System.in);
	System.out.println("请输入半径");
	double  radius= sc.nextDouble();
	Yuan a=new Yuan(radius);
	
	
  System.out.println("面积" +a.getArea());
}

}

心得:就那个将对象存入到父类定义的数组中最后的输出那思考了一会,其他的都还好

(二)使用接口技术

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

编程技巧
(1) 接口中定义的方法在实现接口的具体类中要重写实现;

(2) 利用接口类型的变量可引用实现该接口的类创建的对象。

接口

package hello.java;

public interface Jiekou {
public double size();
public static void main(String[] args) {
	
}
 }

直线接口

 package hello.java;
 import java.util.Scanner;
 public class Line implements Jiekou  {
	private   double x1;
	private   double x2;
	private   double y1;
	private   double y2;
	

	public double getX1() {
		return x1;
	}

	public void setX1(double x1) {
		this.x1 = x1;
	}

	public double getX2() {
		return x2;
	}

	public void setX2(double x2) {
		this.x2 = x2;
	}

	public double getY1() {
		return y1;
	}

	public void setY1(double y1) {
		this.y1 = y1;
	}

	public double getY2() {
		return y2;
	}

	public void setY2(double y2) {
		this.y2 = y2;
	}
	public Line (double a,double b,double c,double d) {
		x1=a;
		y1=b;
		x2=c;
		y2=d;
				
				
	}
	
	public double size() {
		
		return Math.sqrt( Math.pow(x1-x2,2)+Math.pow(y1-y2,2));
		
	}

	
	public static void main(String[] args) {
		Scanner sc=new Scanner (System.in);
		System.out.println("请输入x1");
		double  x1= sc.nextDouble();
		System.out.println("请输入y1");
		double  y1= sc.nextDouble();
		System.out.println("请输入x2");
		double  x2= sc.nextDouble();
		System.out.println("请输入y2");
		double  y2= sc.nextDouble();
		Iine e=new Iine(x1, y1, x2,y2);
		System.out.println("直线大小" +e.size());
	}

}

圆接口

package hello.java;
import java.util.Scanner;
public class Circular implements Jiekou  {
private static  double radius;
public  Circular(double r)
{
	radius=r;
}

public static double getRadius() {
	return radius;
}
public static void setRadius(double radius) {
	Circular.radius = radius;
}
public double size() {

	return Math.PI*2*radius;
}

public static void main(String[] args) {
	
	Scanner sc=new Scanner (System.in);
	System.out.println("请输入半径");
	double  radius= sc.nextDouble();
	 Circular a=new  Circular(radius);
	
	
  System.out.println("周长" +a.size());
}
   }

小测试

package hello.java;

public interface Jiekou {

public static void main(String[] args) {
Line a=new Line (1,2,3,4);
System.out.println("直线大小:" +a.size());
Circular b=new Circular(2);
System.out.println("周长" +b.size());

}
}


心得:这道题目感觉只是让我们稍微接触了一下接口,就稍稍感受了一下

第七周课程总结

抽象类与接口的应用

在java中可以通过对象的多态性为抽象类和接口实例化,这样再使用抽象类和接口时可以调用子类中所覆写的方法

笔记

object类是所有类的父类,最根本的类

子类通过implement关键字实现接口

class 子类  implements 接口A,接口B
{
            }

接口的继承

 interface  子接口  extends  父接口A,父接口B
  {
                        }

抽象类与接口之间的关系

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

如果抽象类和接口都可以使用的话优先使用接口,可以避免单继承的局限。

一个抽象类中可以包含多个接口,一个接口中可以包含多个抽象类。

原文地址:https://www.cnblogs.com/1793979463hyx/p/11654396.html