zoukankan      html  css  js  c++  java
  • 第七周课程总结&实验报告(五)

                                                                         实验报告(五)

    抽象类的使用

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

    2.编程技巧

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

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

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

    实验代码:

    package 实验包;
    import java.util.Scanner;
    public abstract class shape {
           public abstract double print();
    }
    public  class triangle extends shape{
        
        private double a;
        private double b;
        private double c;
        public triangle(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 print(){
            double p=(this.a+this.b+this.c)/2;
            return Math.sqrt(p*(p-this.a)*(p-this.b)*(p-this.c));
        }
    }
    public class rectangle extends shape{
    
        private double length;
        private double broad;
        public rectangle(double length,double broad){
            this.length=length;
            this.broad=broad;
            
        }
        public double getLength() {
            return length;
        }
        public void setLength(double length) {
            this.length = length;
        }
        public double getBroad() {
            return broad;
        }
        public void setBroad(double broad) {
            this.broad = broad;
        }
        public double print(){
             return broad*length;
        }
    }
    public class circle extends shape {
    
        
        private double r;
        public circle(double r) {
            this.r=r;
        }
        public double getR() {
            return r;
        }
        public void setR(double r) {
            this.r = r;
        }
        public double print() {
            return Math.PI*r*r;
        }
      
    }public class test {
            public static void main(String args[]) {
                int f=0;
                while(f==0) {
                System.out.println("请输入三角形的边长:");
                Scanner s=new Scanner(System.in);
                double a=s.nextDouble();
                double b=s.nextDouble();
                double c=s.nextDouble();
                triangle triangle=new triangle(a,b,c);
                if(a>0&&b>0&&c>0&&a+b>c&&a+c>b&&b+c>a) {
                    System.out.println("三角形的面积为:"+triangle.print());
                    f=1;
                }
                else {
                    System.out.println("此输入不符合三角形的定义,请重输");
                }
            }
                while(f==1) {
                System.out.println("请输入矩形的长和宽:");
                Scanner h=new Scanner(System.in);
                double length=h.nextDouble();
                double broad=h.nextDouble();
                rectangle rectangle=new rectangle(length,broad);
                if(length>0&&broad>0) {
                    System.out.println("矩形的面积为:"+rectangle.print());
                    f=2;
                }else {
                    System.out.println("此输入不符合矩形定义,请重输:");
                    }
                }
                while(f==2) {
                System.out.println("请输入圆的半径:");
                Scanner g=new Scanner(System.in);
                double r=g.nextDouble();
                circle circle=new circle(r);
                if(r>0) {
                    System.out.println("圆的面积为:"+circle.print());
                    f=3;
                }else {
                    System.out.println("此输入不符合圆的定义,请重输:");
                    }
                }
                
                         
            }
            
    }

    结果截图:

    使用接口技术

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

    1. 编程技巧

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

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

    实验代码:

    package ddd;
    
    public interface shape {
        public abstract double print();
    }
    public class line implements shape{
    
        
        private double x1,y1,x2,y2;
        public line(double x1,double x2,double y1,double y2) {
            this.x1 =x1;
            this.x2=x2;
            this.y1=y1;
            this.y2=y2;
        }
        public double getX1() {
            return x1;
        }
        public void setX1(double x1) {
            this.x1 = x1;
        }
        public double getY1() {
            return y1;
        }
        public void setY1(double y1) {
            this.y1 = y1;
        }
        public double getX2() {
            return x2;
        }
        public void setX2(double x2) {
            this.x2 = x2;
        }
        public double getY2() {
            return y2;
        }
        public void setY2(double y2) {
            this.y2 = y2;
        }
        public double print(){
            return Math.sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
        }
    }
    public class circle implements shape {
    
        
        private double r;
        public circle(double r) {
            this.r =r;
        }
        public double getR() {
            return r;
        }
        public void setR(double r) {
            this.r = r;
        }
        public double print() {
            return Math.PI *r*r;
        }
        
    }
    package ddd;
    import java.util.Scanner;
    public class text {
         public static void main(String[] arge) {
             System.out.println("请输入点的坐标:");
             Scanner s=new Scanner(System.in);
             double x1=s.nextDouble();
             double y1=s.nextDouble();
             double x2=s.nextDouble();
             double y2=s.nextDouble();
             line line=new line(x1,y1,x2,y2);
             System.out.println("两点之间的距离为:"+line.print());
             int f=0;
             while(f==0) {
             System.out.println("请输入圆的半径:");
             Scanner g=new Scanner(System.in);
             double r=g.nextDouble();
             circle circle=new circle(r);
             if(r>0) {
                 System.out.println("圆的面积为:"+circle.print());
                 f=1;
             }
             else {
                 System.out.println("此输入不符合圆的定义,请重输:");
             }
             }
         }
    }

    结果截图:

                                                               课程总结

    这周学习抽象类与接口的应用:为抽象类与接口实例化,相比来说,接口中所有的方法必须是抽象方法;
    接口没有构造方法,不能用于实例化对象。抽象类都要被继承,有子类覆写,更详细的进行输出;
    一个类可以同时实现多个接口;一个类只能继承一个类,但是能实现多个接口。一个接口能继承另一个接口,这和类之间的继承比较相似;
    抽象类和接口都不能直接实例化,如果要实例化,抽象类变量必须指向实现所有抽象方法的子类对象,接口变量必须指向实现所有接口方法的类对象。
    抽象类要被子类继承,接口要被类实现;
    接口只能做方法申明,抽象类中可以做方法申明,也可以做方法实现,接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量;
    抽象类里的抽象方法必须全部被子类所实现,如果子类不能全部实现父类抽象方法,那么该子类只能是抽象类;
    同样,一个实现接口的时候,如不能全部实现接口方法,那么该类也只能为抽象类。
    抽象方法只能申明,不能实现。abstract void abc();不能写成abstract void abc(){},抽象类里可以没有抽象方法
    如果一个类里有抽象方法,那么这个类只能是抽象类,抽象方法要被实现,所以不能是静态的,也不能是私有的
    接口可继承接口,并可多继承接口,但类只能单根继承
    还学习了Object类:一个类如果没有明显继承一个类则肯定是Object类

  • 相关阅读:
    AIMS 2013中的性能报告工具不能运行的解决办法
    读懂AIMS 2013中的性能分析报告
    在线研讨会网络视频讲座 方案设计利器Autodesk Infrastructure Modeler 2013
    Using New Profiling API to Analyze Performance of AIMS 2013
    Map 3D 2013 新功能和新API WebCast视频下载
    为Autodesk Infrastructure Map Server(AIMS) Mobile Viewer创建自定义控件
    ADN新开了云计算Cloud和移动计算Mobile相关技术的博客
    JavaScript修改css样式style
    文本编辑神器awk
    jquery 开发总结1
  • 原文地址:https://www.cnblogs.com/wangdian1/p/11655252.html
Copyright © 2011-2022 走看看