您如何看待使用私有静态方法?
就个人而言,我更喜欢使用静态私有方法来进行非静态,只要它不需要访问任何实例字段.
但我听说这种做法违反了OOP原则.
编辑:我想从风格的角度来看,而不是表现.
我有两个班级A和ClassB:
static class ClassA
{
static string SomeMethod()
{
return "I am a Static Method";
}
}
class ClassB
{
static string SomeMethod()
{
return "I am a Static Method";
}
}
Run Code Online (Sandbox Code Playgroud)
我想知道ClassA.SomeMethod();和之间有什么区别ClassB.SomeMethod();
如果可以在不创建类实例的情况下访问它们,为什么我们需要创建静态类而不是仅使用非静态类并将方法声明为静态?
让我们假设在我的编码环境中强加了一条规则(或者经验法则),即不使用,修改或以其他方式需要任何实例变量来完成其工作的类上的任何方法都是静态的.这样做有没有固有的编译时间,运行时或任何其他缺点?
(编辑进一步澄清)
我知道这个问题有点开放和模糊,所以我为此道歉.我的提问意图主要是"辅助"方法.实用程序类(具有私有CTOR,因此无法实例化)作为我们已经执行的静态方法的持有者.我在这里的问题更像是帮助主类API的这些小方法.
我可能在一个完成实际工作的类上有4或5个主要的API /实例方法,但在这样做的过程中,它们共享一些常用功能,这些功能可能只用于API方法的输入参数,而不是内部状态.这些是我通常在他们自己的帮助器方法中提取的代码部分,如果他们不需要访问类的状态,那么将它们设置为静态.
我的问题是,这本质上是一个坏主意,如果是这样,为什么?(或者为什么不呢?)
我在阅读Programming Scala.在第4章的开头,作者评论说Java支持静态方法,这些方法是"不那么纯粹的OO概念".为什么会这样?
我是模拟对象的新手,但我知道我需要让我的类实现接口才能模拟它们.
我遇到的问题是,在我的数据访问层,我想要静态方法,但我不能在接口中放置静态方法.
最好的方法是什么?我应该只使用实例方法(这似乎是错误的)还是有其他解决方案?
我做了一个小实验:
public abstract class MyClass
{
private static int myInt = 0;
public static int Foo()
{
return myInt;
}
public static int Foo(int n)
{
myInt = n;
return bar();
}
private static int bar()
{
return myInt;
}
}
Run Code Online (Sandbox Code Playgroud)
然后我跑了:
MessageBox.Show(MyClass.Foo().ToString());
MessageBox.Show(MyClass.Foo(3).ToString());
MessageBox.Show(MyClass.Foo().ToString());
MessageBox.Show(MyClass.Foo(10).ToString());
MessageBox.Show(MyClass.Foo().ToString());
Run Code Online (Sandbox Code Playgroud)
我预期的结果是0,3,0,10,0.
令我惊讶的是,我得到了0,3,3,10,10.
这些变化持续多久了?程序执行的持续时间?调用静态方法的函数的持续时间?
我被告知static方法是隐含的final,因此不能被覆盖.真的吗?
有人可以提供一个更好的覆盖静态方法的例子吗?
如果静态方法只是类方法,那么拥有它们的真正用途是什么?
我知道我们不能在Java中覆盖静态方法,但有人可以解释下面的代码吗?
class A {
public static void a() {
System.out.println("A.a()");
}
}
class B extends A {
public static void a() {
System.out.println("B.a()");
}
}
Run Code Online (Sandbox Code Playgroud)
我怎么能a()在课堂上覆盖方法B?
我正在开发一组实现通用接口的类.我的库的使用者应该期望这些类中的每一个都实现一组静态函数.无论如何,我可以装饰这些类,以便编译器能够捕获其中一个函数未实现的情况.
我知道在构建消费代码时最终会被捕获.而且我也知道如何使用一种工厂类解决这个问题.
只是想知道是否有任何语法/属性要求类上的静态函数.
Ed删除了"界面"这个词以避免混淆.
static-methods ×10
c# ×6
java ×4
interface ×3
oop ×3
.net ×2
overriding ×2
coding-style ×1
final ×1
mocking ×1
non-static ×1
operators ×1
runtime ×1
scala ×1
static ×1