Java和C#的String类能被继承吗,为什么?

答案是不能的。

JAVA分析:

因为我们查看String源码就知道,String被关键字final修饰,所以不能被继承。

public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence {
    /** The value is used for character storage. */
    private final char value[];

}

  

这里就要简单介绍一下final的基础。

1、修饰类当用final去修饰一个类的时候,表示这个类不能被继承。注意:a. 被final修饰的类,final类中的成员变量可以根据自己的实际需要设计为fianl。b. final类中的成员方法都会被隐式的指定为final方法。说明:在自己设计一个类的时候,要想好这个类将来是否会被继承,如果可以被继承,则该类不能使用fianl修饰,在这里呢,一般来说工具类我们往往都会设计成为一个fianl类。在JDK中,被设计为final类的有String、System等。
2、修饰方法
被final修饰的方法不能被重写。
注意:
a. 一个类的private方法会隐式的被指定为final方法。
b. 如果父类中有final修饰的方法,那么子类不能去重写。
3、修饰成员变量
注意:
a. 必须初始化值。
b. 被fianl修饰的成员变量赋值,有两种方式:1、直接赋值 2、全部在构造方法中赋初值。
c. 如果修饰的成员变量是基本类型,则表示这个变量的值不能改变。
d. 如果修饰的成员变量是一个引用类型,则是说这个引用的地址的值不能修改,但是这个引用所指向的对象里面的内容还是可以改变的。

总之final就是像C语言中的const一样,代表一个常量,你在一开始初始化就要赋值,也不允许你改变它。

C#解析:

String类是sealed类故不可以继承。

当对一个类应用 sealed 修饰符时,此修饰符会阻止其他类从该类继承。String是这样定义的: public sealed class String : IComparable, ICloneable,IConvertible, IEnumerable

sealed是密封百类的关键度字,只要类定义前面有这个关键字,其他类就无法集成此类,你自己回也可以定义一个sealed类,别人就答无法继承了。在下面的示例中,类 HoverTree 从类 Keleyi 继承,但是任何类都不能从类 HoverTree 继承。

class Keleyi {} 
sealed class HoverTree : Keleyi {}

还可以在重写基类中的虚方法或虚属性的方法或属性上使用 sealed 修饰符。 这将使您能够允许类从您的类继承,并防止它们重写特定的虚方法或虚属性。

原文地址:https://www.cnblogs.com/shiyh/p/12802711.html