美文网首页
第 23 条:类层次优先与标签类

第 23 条:类层次优先与标签类

作者: 综合楼 | 来源:发表于2021-05-08 23:29 被阅读0次
    类层次优先与标签类.jpeg
    标签类
    // Tagged class - vastly inferior to a class hierarchy!
    class Figure {
        enum Shape { RECTANGLE, CIRCLE };
        // Tag field - the shape of this figure
        final Shape shape;
        // These fields are used only if shape is RECTANGLE
        double length;
        double width;
        // This field is used only if shape is CIRCLE
        double radius;
        // Constructor for circle
        Figure(double radius) {
            shape = Shape.CIRCLE;
            this.radius = radius;
        }
        // Constructor for rectangle
        Figure(double length, double width){
            shape = Shape.RECTANGLE;
            this.length = length;
            this.width = width;
        }
        double area(){
            switch(shape) {
                case RECTANGLE:
                    return length * width;
                case CIRCLE:
                    return Math.PI * (radius * radius);
                default:
                    throw new AssertionError(shape);
            }
        }
    }
    
    
    类层次
    // Class hierarchy replacement for a tagged class
    abstract class Figure {
        abstract double area();
    }
    class Circle extends Figure {
        final double radius;
        Circle(double radius) { this.radius = radius; }
        @Override double area() { return Math.PI * (radius*radius);}
    }
    class Rectangle extends Figure {
        final double length;
        final double width;
        Rectangle(double length, double width) {
            this.length = length;
            this.width = width;
        }
        @Override double area() { return length * width; }
    }
    
    

    相关文章

      网友评论

          本文标题:第 23 条:类层次优先与标签类

          本文链接:https://www.haomeiwen.com/subject/aazkdltx.html