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

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

    实验四 类的继承

    • 实验目的
    • 理解抽象类与接口的使用;
    • 了解包的作用,掌握包的设计方法。
    • 实验要求
    • 掌握使用抽象类的方法。
    • 掌握使用系统接口的技术和创建自定义接口的方法。
    • 了解 Java 系统包的结构。
    • 掌握创建自定义包的方法。
    • 实验内容

    (一)抽象类的使用

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

    2.编程技巧

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

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

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

    实验代码:

    package main;
    
    public abstract class Shape {
        private double area;//定义面积
    
        public double getArea() {
            return area;
        }
    
        public void setArea(double area) {
            this.area = area;
        }
        public abstract double area();//取得信息,定义抽象方法
    
    }
    package main;
    
    public class Circle extends Shape {//子类通过继承抽象类
        private double radius;//定义圆的半径
        
        public double getRadius() {
            return radius;
        }
    
        public void setRadius(double radius) {
            this.radius = radius;
        }
        public Circle(double radius) {//为属性赋值
            this.radius=radius;
        }
    
        public double area() {//覆写抽象类中的抽象方法
            return Math.PI*Math.pow(radius, 2);//计算面积
        }
    
    }
    package main;
    
    public class Rectangle extends Shape {//子类通过继承抽象类
        private double width,high;//定义矩形宽和高
    
        public double getWidth() {
            return width;
        }
    
        public void setWidth(double width) {
            this.width = width;
        }
    
        public double getHigh() {
            return high;
        }
    
        public void setHigh(double high) {
            this.high = high;
        }
        
        public Rectangle(double width,double high) {//为属性赋值
            this.high=high;
            this.width=width;
        }
        
        public double area() {//覆写抽象类中的抽象方法
            return width*high;//计算面积
        }
    
    }
    package main;
    
    public class Triangle extends Shape {//子类通过继承抽象类
        private double a,b,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 Triangle(double a,double b,double c) {//为属性赋值
            this.a=a;
            this.b=b;
            this.c=c;
        }
        
        public double area() {//覆写抽象类中的抽象方法
            if(a+b>c&&a+c>b&&b+c>a)//判断是否能组成三角形
            {
                double p=(a+b+c)/2;
                return Math.sqrt((p*(p-a)*(p-b)*(p-c)));//计算面积
                
            }
            else return 0;//若不能组成三角形,则输出面积为0
        }
    }
    package main;
    
    public class test {
    
        public static void main(String[] args) {
            Shape tr=new Triangle(3,4,5);
            Shape re=new Rectangle(4,5);
            Shape ci=new Circle(4);//实例化子类对象       
            System.out.println("三角形的面积为:"+tr.area());//调用被子类覆写过的方法
            System.out.println("矩形的面积为:"+re.area());
            System.out.println("圆的面积为:"+ci.area()); //输出图形面积
            }
    }

    实验结果截图:

    实验的过程和问题:

    做这个问题时,按题目的要求定义了一个抽象类Shape,我建立了多个类,这样感觉思路更加清晰,每个类写的代码都差不多,知道每个图形面积计算的方法就可以覆写抽象类的抽象方法写出来,在计算三角形面积时要判断是否能组成三角形。

    (二)使用接口技术

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

    1. 编程技巧

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

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

    实验代码:

    package main1;
    
     interface Shape {             //定义Shape接口
        public void size();     //size()方法
    }
      
    class Line implements Shape{//子类实现接口
        private double length;//定义直线的长度
    
        public double getLength() {
            return length;
        }
    
        public void setLength(double length) {
            this.length = length;
        }
        
         public Line(double length) {     //为属性赋值
             this.length = length;
         }
         public void size() {      // 覆写Shape接口的抽象方法
             System.out.println("直线的长度为:"+this.length);
         }
     }
    
    class Circle implements Shape{//子类实现接口
        private double radius;//定义圆的半径
    
        public double getRadius() {
            return radius;
        }
    
        public void setRadius(double radius) {
            this.radius = radius;
        }
        public Circle(double radius){ 
               this.radius=radius;          //为属性赋值
           }
    
        public void size() {//覆写Shape接口的抽象方法
            System.out.println("圆的面积为:"+Math.PI*radius*radius);
            
        }
    }
     
    public class test {
        public static void main(String[] args){
            Shape li=new Line(6);
            Shape ci=new Circle(5);      //通过子类为接口实例化
            li.size();
            ci.size();           //调用被子类覆写的方法
        }
    }

    实验结果截图:

    实验的结果和问题:

    这一题是用接口写的,看了书上的代码感觉接口和抽象类差别不大,还是有点分不清,后来看了书上的对比,又在这道题实践了一下,才发现了一些差别,列如接口只有常量和抽象方法,但二者的优劣势还是看不出来,可能要在更复杂的问题才分的出来。

    学习课程总结

    抽象类与接口的关系

    序号

    区别点

    抽象类

    接口

    1

    定义

    包含一个抽象方法的类

    抽象方法和全局常量的集合、

    2

    组成

    构造方法、抽象方法、普通方法、常量、变量

    常量、抽象方法

    3

    使用

    子类继承抽象类

    子类实现接口

    4

    关系

    抽象类可以实现多个接口

    接口不能继承抽象类,但允许继承多个接口

    5

    常见设计模式

    模板设计

    工厂设计、代理设计

    6

    对象

    都通过对象的多态性产生实例化对象

     

    7

    局限

    抽象类有单继承的局限

    接口没有单继承的局限

    8

    实际

    作为一个模板

    是作为一个标准或是表示一种能力

    9

    选择

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

     

    10

    特殊

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

     

    异常:

    try{
    被检测的代码
    可能出现异常的代码
     }catch(异常类名 变量){
    异常的处理方式
    循环,判断,调用方法,变量


     }finally{
    必须要执行的代码
     }

    异常中的关键字:throw 在方法的内部,抛出异常对象,throws用于方法的声明上,表名此方法可能出现异常请调用者处理,throws 后面必须写异常类的类名,

    学习总结:本周学习的主要是接口和抽象类,现在可以用他们写程序,但是除了字符上还是没有找到它们明显的区别,可能以后在写代码过程中会更加理解它们的不同,但其实用抽象类和接口写代码还是挺方便的,感觉还不错。



     

  • 相关阅读:
    mysql表结构转hive表结构,字段映射脚本
    kafka 相关命令 偏移重置
    Specified key was too long; max key length is 767 bytes
    java IO 流关系图谱
    jvm 性能监控与linux常用命令
    jupiter的@TempDir 等不生效
    mysql 深度分页
    jedis的ShardedJedisPool链接池的扩容问题
    拜读《三国》看懂男人
    linux 性能优化
  • 原文地址:https://www.cnblogs.com/198266qq/p/11656622.html
Copyright © 2011-2022 走看看