如何防止类 'a' 被另一个类继承?

15

我有一个名为fdetails的类,我不想让其他类继承它。

我可以将其设置为不被其他类继承吗? 我想在以下三种语言中完成此操作:

  • Java
  • VB.NET 3.5
  • C# 3.5

Java:

public final class fdetails {
    // class code
}

VB.NET 3.5:

NotInheritable Public Class fdetails
    ' class code
End Class

C# 3.5:

public sealed class fdetails {
    // class code
}

"最初的回答"

7个回答

42
java: final  
vb: NotInheritable (NonOverrideable for properties)
c#: sealed

4
C#: 你可以创建私有构造函数来限制继承。 - Bimal Das
通过使用 final,您仍然可以继承它:“内部类”。 - Yousha Aleayoub

11

在Java中使用final关键字:

public final class fdetails{

}
在C#中使用sealed关键字。
public sealed class fdetails{

}

在VB.net中使用NotInheritable关键字:

public notinheritable class fdetails

end class

4

在C#中,您可以使用sealed关键字来防止类被继承。

在VB.NET中,您可以使用NotInheritable关键字。

在Java中,您可以使用关键字final


3

在Java中,使用final关键字:

public final class FDetails

在 C# 中,sealed 关键字:
sealed class FDetails

1
static 不是必要的,实现所需功能即可。 - Jeremy

1
为了防止C#中的类被继承,使用关键字sealed。因此,sealed类不能作为任何其他类的基类。显然,sealed类也不能是抽象类。以下是代码...
//C# Example
sealed class ClassA
{
    public int x;
    public int y;
}

上面定义的ClassA不能被其他类继承。可以创建ClassA的实例并访问其成员,但不可能像下面的代码一样:

class DerivedClass : ClassA { } // Error

Java和VB.net中相同:

java: final  
vb: NotInheritable (NonOverrideable for properties)

0

除了 https://dev59.com/Um855IYBdhLWcg3w5Igb#4096427 的答案,还可以通过创建带有私有构造函数的基类来避免继承(在 C# 中,如果您引用基类,则会出现the class is inaccessible due to its protection level的错误)。


1
当然可以,但是如果问题陈述是该类不可继承(即不可扩展),那么请使用专门用于此目的的语言机制——在Java中,这就是final——而不是某些具有非继承性作为副作用的其他构造。私有构造函数防止的远不止继承! - user10762593
是的,正如我在 https://dev59.com/Um855IYBdhLWcg3w5Igb#4096427 中提到的那样,这是防止继承的最干净的方法。 - Krishna Prasad S

0
对于C#,它是“sealed”关键字。
对于Java,它是“final”关键字。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接