繁体   English   中英

嵌套静态类

[英]Nested static class

public class ShapesGeometry {

    public static Circle Circle = new Circle();
    public static Rectangle Rectangle = new Rectangle();
    public static Triangle Triangle = new Triangle();

    public static class Circle {
        public double GetArea(double Radius) {
            return (3.14159 * Radius * Radius);
        }

        public double GetCircumFerence(double Radius) {
            return (2 * 3.14159 * Radius);
        }
    }//End Class Circle

    public static class Rectangle {
        public double GetArea(double Length, double Width) {
            return (Length * Width);
        }

        public double GetCircumFerence(double Length, double Width) {
            return (2 * Length + 2 * Width);
        }
    }//End Class Rectangle

    public static class Triangle {
        public double GetArea(double Base, double Height) {
            return (0.5 * Base * Height);
        }

        public double GetCircumFerence(double Side1, double Side2, double Side3) {
            return (Side1 + Side2 + Side3);
        }
    }// End Class Triangle 
}

因此,我开始进行一些私人讲座,以提高我在Java编程中的技能,而且我觉得我的老师在胡说八道(也许我错了)。 在上面的示例(嵌套静态类)中,我有一些问题要问您。

  1. 上面显示的示例是否是引入嵌套静态类的好示例?

  2. 然后我的老师谈论继承,我真的看不到任何继承吗? 就像这些类没有从我所看到的继承任何东西。

没错,该示例中没有继承,因此引入嵌套静态类不是一个很好的示例。 我希望对继承的概念使用3个独立的类(和基类)(其中几何形状是一个典型的例子)。 但是,当然,如果不知道您的老师在解释代码时实际上说了什么,就很难发表评论。

并且静态嵌套类只能在显示非静态变量之后才引入。

  1. 上面显示的示例是引入嵌套静态类的好示例吗?

不,似乎没有理由使它们静态化,这些类应该在自己的文件中而不是嵌套的

  1. 然后我的老师谈论继承,我真的看不到任何继承吗? 就像这些类没有从我所看到的继承任何东西。

这里没有继承。

一个如何正确使用嵌套静态类的很好的例子是java.util.Collections类,它具有许多嵌套的私有静态类,这些类实现了不同的Collection对象,例如

Collections.emptyList() - List特殊实现,始终为空

Collections.UnmodifableCollection -一种特殊的实施Collection不能有元素的加入或删除

  1. 引入嵌套类不是一个好例子,因为您提出的声明并非出于合理使用这些类的动机。
  2. 您是对的,这里没有继承权。

在类内部创建的静态类在Java中称为静态嵌套类。 此示例未显示静态类的实际用法。 这是一个例子:

class TestOuter {
    static int data = 100; 

    static class Inner {
        void message() {
            System.out.println("data is "+data);
        }
    }

    public static void main(String args[]) {  
        TestOuter.Inner obj = new TestOuter.Inner();  
        obj.message();  
    }  
} 

关于第二点,没有继承。

如果您想要一个嵌套静态类和继承的示例,那么我建议的第一个示例是看一下Josh Bloch Builder模式(例如,在《 Effective Java 2》上)。

public interface Builder<T> { T build(); }

public class MyClass {

  private MyClass() {}

  public static class MyBuilder implements Builder<MyClass> { /*...*/ }
  /*...*/
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM