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

    一.抽象类的使用

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

    2.编程技巧

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

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

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

    (二)使用接口技术

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

    编程技巧

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

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

    实验代码

    package test;
    
        import java.util.Scanner;
        abstract   class Hope{          //定义一个抽象类
            public abstract double Area();         //求面积的抽象方法
             }
            class Triangle extends Hope{              //三角形继承Hope
            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 void setA(double a) {
                this.a=a;
            }
            public double getA(){
                return a;
            }
            public void setB(double b) {
                this.b=b;
            }
            public double getB() {
                return b;
            }
            public void setC(double c) {
                this.c=c;
            }
            public double getC() {
                return c;
            }
            public double Area() {                 //计算三角形的面积
                double p=(a+b+c)/2;
                return Math.sqrt(p*(p-this.a)*(p-this.b)*(p-this.c));
            }
        }
        class Rectangle extends Hope{          //矩形继承Hope
            private double width;
            private double hight;
            public Rectangle(double width,double hight) {          //构造矩形的宽高
                this.width=width;
                this.hight=hight;
            }
            public void setWidth(double width) {
                this.width=width;
            }
            public double getWidth() {
                return width;
            }
            public void setHigth(double hight) {
                this.hight=hight;
            }
            public double getHight() {
                return hight;
            }
            public double Area() {                 //计算矩形的面积
                return this.width*this.hight;
            }
        }
        class Circle extends Hope{                   //圆继承Hope
            private double r;
            public Circle(double r) {                //构造圆的半径
                this.r=r;
            }
            public void setR(double r) {
                this.r=r;
            }
            public double getR() {
                return r;
            }
            public double Area() {               //计算圆的面积
                return Math.PI*this.r*this.r;
            }
        }
        public class Test {
             public static void main(String[] args) {
            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+b)>c&&(a+c)>b&&(b+c)>a) {
                System.out.println("三角形的面积为:"+triangle.Area());
            }else {
                System.out.println("这不是一个三角形请重新输入");
                return;
            }
            System.out.println("请输入矩形的宽高:");
            Scanner s1=new Scanner(System.in);
            double width=s1.nextDouble();                //同上
            double hight=s1.nextDouble();
            Rectangle rectangle=new Rectangle(width,hight);                   //同上
            System.out.println("矩形的面积为:"+rectangle.Area());
            System.out.println("请输入圆的半径:");
            Scanner s2=new Scanner(System.in);
            double r=s2.nextDouble();                            //读取输入内容
            Circle circle=new Circle(r);                                   //同上
            if(r<0) {
                System.out.println("这不是一个圆请重新输入");
            }
            else {
            System.out.println("圆的面积为:"+circle.Area());
             }
             }
        }

    实验截图

    (二)使用接口技术

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

    实验代码

    interface shape {
        public void size();
    }
    
    class Cricle implements shape {
    
        public double redius;
    
        public Cricle(double redius) {
            this.redius = redius;
        }
    
        public double getRedius() {
            return redius;
        }
    
        public void setRedius(double redius) {
            this.redius = redius;
        }
    
        public double SSS() {
            double s = Math.pow(redius, 2) * 3.14;
            return s;
        }
    
        public void size() {
            System.out.println("圆的大小为" + SSS());
        }
    
    }
    
    
    class zhixian implements shape {
        public double h;
    
        public zhixian(double h) {
            this.h = h;
        }
    
        public double getH() {
            return h;
        }
    
        public void setH(double h) {
            this.h = h;
        }
    
        public double S() {
            double s = h;
            return s;
        }
    
        public void size() {
            System.out.println("直线的大小为" + S());
        }
    
    }
    
    public class test {
    
        public static void main(String[] args) {
            shape str1 = new Cricle(10);
            shape str2 = new zhixian(10);
            str1.size();
            str2.size();
        }
    
    }

    实验截图

    课程总结

    1.抽象类和接口都不能直接实例化,如果要实例化,抽象类变量必须指向实现所有抽象方法的子类对象,接口变量必须指向实现所有接口方法的类对象。

    2.抽象类要被子类继承,接口要被类实现。

    3.接口只能做方法申明,抽象类中可以做方法申明,也可以做方法实现

    4.接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量。

    5.抽象类里的抽象方法必须全部被子类所实现,如果子类不能全部实现父类抽象方法,那么该子类只能是抽象类。同样,一个实现接口的时候,如不能全部实现接口方法,那么该类也只能为抽象类。

    6.抽象方法只能申明,不能实现。abstract void abc();不能写成abstract void abc(){}。

    7.抽象类里可以没有抽象方法

    8.如果一个类里有抽象方法,那么这个类只能是抽象类

    9.抽象方法要被实现,所以不能是静态的,也不能是私有的。

    10.接口可继承接口,并可多继承接口,但类只能单根继承。

     

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

     

  • 相关阅读:
    《一个程序员的奋斗史》猜“封面+页数”结果揭晓!!
    软中断小结
    【嵌入式Linux学习七步曲之第五篇 Linux内核及驱动编程】Linux内核抢占实现机制分析
    《一个程序员的奋斗史》猜“封面+页数”结果揭晓!!
    深入理解linux内核自旋锁
    Linux 2.6 内核定时器
    在用户空间发生中断时,上下文切换的过程
    Linux 中断总结
    Linux内核抢占实现机制分析
    寒假Day23:Git初步创建版本库
  • 原文地址:https://www.cnblogs.com/tb-0706/p/11663508.html
Copyright © 2011-2022 走看看