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


    实验四 类的继承

    实验目的

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

    实验要求

    掌握使用抽象类的方法。
    掌握使用系统接口的技术和创建自定义接口的方法。
    了解 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)
    关系 抽象类可以实现多个接口 接口不能继承抽象类,但允许继承多个接口
    常见设计模式 模板设计 工厂设计,代理设计
    对象 通过对象的多态性产生实例化对象 通过对象的多态性产生实例化对象
    局限 抽象类单继承的局限 接口没有单继承局限
    实际 模板 标准或能力

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

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

  • 相关阅读:
    Xn数列(codevs 1281)
    素数密度(洛谷 1835)
    Sightseeing(poj 3463)
    线段树——Ultra-QuickSort
    最大子矩阵
    完成作业的先后顺序
    堆积木块的最大高度
    最长上升序列和
    最长上升子序列
    高精度乘法程序
  • 原文地址:https://www.cnblogs.com/1793979463hyx/p/11654396.html
Copyright © 2020-2023  润新知