嵌套的静态类

时间:2015-06-27 17:57:41

标签: java

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. 我的老师然后谈到继承,我真的看不到任何继承?就像这些类不能从我所看到的东西继承任何东西。

5 个答案:

答案 0 :(得分:1)

你是对的,示例中没有继承,并且它不是引入嵌套静态类的好例子。我希望使用3个独立的类(和基类)作为继承的概念(其中几何形状是一个规范的例子)。但当然,如果不知道老师在解释代码时实际说了些什么,就很难评论。

只有在显示非静态变体后才能引入静态嵌套类。

答案 1 :(得分:1)

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

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

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

这里没有继承。

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

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

Collections.UnmodifableCollection - Collection的特殊实现,无法添加或删除元素

答案 2 :(得分:0)

  1. 引入嵌套类不是一个很好的例子,因为你提出的声明并不是出于对这些类的任何合理用法的推动。
  2. 你是对的,没有继承权。

答案 3 :(得分:0)

在类中创建的静态类在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();  
    }  
} 

对于你的第二点,没有继承。

答案 4 :(得分:0)

如果你想要一个嵌套静态类和继承的例子,我建议的第一个例子就是看看Josh Bloch Builder模式(例如,在Effective Java 2上的书)。

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

public class MyClass {

  private MyClass() {}

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