精华内容
下载资源
问答
  • String类为什么不能被继承

    千次阅读 2020-03-26 17:34:38
    面试的时候我们经常会被问到一个问题,那就是String类能被继承吗?为什么?我们都知道String能被继承,但为什么能却能回答地很完整。 首先我们可以看下String的源码(部分): public final class String ...

    面试的时候我们经常会被问到一个问题,那就是String类能被继承吗?为什么?我们都知道String类不能被继承,但为什么不能却不能回答地很完整。
    首先我们可以看下String的源码(部分):

    public final class String implements java.io.Serializable, Comparable<String>, CharSequence {
        /** The value is used for character storage. */
        private final char value[];
    
        /** Cache the hash code for the string */
        private int hash; // Default to 0
    
        /** use serialVersionUID from JDK 1.0.2 for interoperability */
        private static final long serialVersionUID = -6849794470754667710L;
        
         public String(char value[], int offset, int count) {
            if (offset < 0) {
                throw new StringIndexOutOfBoundsException(offset);
            }
            if (count <= 0) {
                if (count < 0) {
                    throw new StringIndexOutOfBoundsException(count);
                }
                if (offset <= value.length) {
                    this.value = "".value;
                    return;
                }
            }
            // Note: offset or count might be near -1>>>1.
            if (offset > value.length - count) {
                throw new StringIndexOutOfBoundsException(offset + count);
            }
            this.value = Arrays.copyOfRange(value, offset, offset+count);
        }
    

    从String类的源码我们可以看出,该类是被final关键字修饰的,并且String类实际是一个被final关键字修饰的char[]数组,所以实现细节上也是不允许改变,这就是String类的Immutable(不可变)属性。
    为什么说String类是被final关键字修饰的所以不能被继承?
    在《Java编程思想》中对于final关键字有这样的介绍:

    根据程序上下文环境,Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类、非抽象类成员方法和变量。你可能出于两种理解而需要阻止改变:设计或效率。
      final类不能被继承,没有子类,final类中的方法默认是final的。   final方法不能被子类的方法覆盖,但可以被继承。
      final成员变量表示常量,只能被赋值一次,赋值后值不再改变。   final不能用于修饰构造方法。
      注意:父类的private成员方法是不能被子类方法覆盖的,因此private类型的方法默认是final类型的。

    如果一个类不允许其子类覆盖某个方法,则可以把这个方法声明为final方法。
    通过上述介绍,可以发现final关键字可以用来修饰类、方法和变量(包括成员变量和局部变量)。

    1、当final关键字修饰类时
    当一个类被final修饰时,表明这个类不能被继承。被final关键字修饰的类中的成员变量可以根据需要设为final,但是要注意final类中的所有成员方法都会被隐式地指定为final方法。
    在这里插入图片描述
    当我们在开发过程中如果让一个类继承一个被final关键字修饰的类时,编辑器也会报错,“Demo1不能成为最终类FinalClass的子类,请移除FinalClass的final关键字”。

    2、当final关键字修饰方法时
    当一个方法被final关键字修饰时,则父类的该方法不能被子类所覆盖。《Java编程思想》中提到:
    使用final方法的原因有两个。
    第一个原因是把方法锁定,以防任何继承类修改它的含义;
    第二个原因是效率。在早期的Java实现版本中,会将final方法转为内嵌调用。但是如果方法过于庞大,可能看不到内嵌调用带来的任何性能提升。在最近的Java版本中,不需要使用final方法进行这些优化了。
    同样如果父类中声明了final修饰的方法,则子类在继承该父类是,如果覆盖该final方法编辑器同样会报错。
    在这里插入图片描述
    在这里插入图片描述

    3、当final关键字修饰变量(包括成员变量和局部变量)时
    当final关键字修饰变量时,表示该变量是常量,在初始化时便要赋值并且只能被赋值一次,初始化之后不能更改。。如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象,但是它指向的对象的内容是可变的。
    当用final作用于类的成员变量时,成员变量必须在声明时或者构造器中进行初始化赋值,否则会报错,而局部变量只需要在使用之前被初始化赋值即可:
    在这里插入图片描述

    对于final修饰的变量初始化之后不能更改,如果更改也会报错。
    在这里插入图片描述
    在这里插入图片描述

    其实在问String类能否被继承时,不仅仅考察的是对于String源码的理解,还有对于final关键字的掌握。

    参考资料:
      《Java编程思想》
    在这里插入图片描述

    展开全文
  • Java--String类能否被继承

    千次阅读 2018-05-30 11:04:32
    String类能否被继承呢?答案是能的 String类的方法头是:Public final class String extends Object 之所以不能被继承就是因为...final修饰的时候 ,这个不能被继承中所有的方法也就被隐式的变为fin...

    String类能否被继承呢?答案是不能的
    String类的方法头是:Public final class String extends Object
    之所以不能被继承就是因为其中的修饰关键字 final
    其含义相当于C/C++的const,意味着不可修改。
    final可以用来修饰 类 、变量 和 方法,
    final修饰类的时候 ,这个类就不能被继承了 类中所有的方法也就被隐式的变为final方法
    final修饰的方法的类可以被继承,但是final修饰的方法无法被覆写
    final修饰的变量相当于常量,只能被赋值一次,赋值后值不再更改 ,这就表示了final修饰的变量必须被初始化,初始化可以在声明变量的时候,也可以在构造函数中初始化

    展开全文
  • String类能否被继承

    万次阅读 多人点赞 2016-03-31 12:49:16
    不能被继承

    因为Sting是这样定义的:public final class String extends Object,里边有final关键字,所以不能被继承。

    什么样的类不能被继承?

     一,在Java中,只要是被定义为final的类,也可以说是被final修饰的类,就是不能被继承的。
     二,final是java中的一个关键字,可以用来修饰变量、方法和类。用关键词final修饰的域成为最终域。用关键词final修饰的变量一旦赋值,就不能改变,也称为修饰的标识为常量。如果一个类的域被关键字final所修饰,它的取值在程序的整个执行过程中将不会改变。
     三,假如说整个类都是final,就表明自己不希望从这个类继承,或者不答应其他任何人采取这种操作。换言之,出于这样或那样的原因,我们的类肯定不需要进行任何改变;或者出于安全方面的理由,我们不希望进行子类化(子类处理)。

    展开全文
  • String类能被继承吗?为什么

    千次阅读 2019-07-09 07:54:32
    因为我们查看String源码就知道,String被关键字final修饰,所以不能被继承。 这里就要简单介绍一下final的基础。 1、修饰当用final去修饰一个的时候,表示这个类不能被继承。注意:a. 被final修饰的,final...

    答案是不能的。

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

    这里就要简单介绍一下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一样,代表一个常量,你在一开始初始化就要赋值,也不允许你改变它。

    参考链接:http://baijiahao.baidu.com/s?id=1601084106055683243&wfr=spider&for=pc


    展开全文
  • String类能被继承吗,为什么。

    千次阅读 2018-09-06 13:27:54
    String 不能被继承的,因为他是被final关键字修饰的。 public final class String implements java.io.Serializable, Comparable&lt;String&gt;, CharSequence { /** The value is used for ...
  • String是所有语言中最常用的一个。我们知道在Java中,String可变的、final的。... 若 String 允许被继承, 由于它的高度使用率, 可能会降低程序的性能,所以 String 定义成 final。   一:St
  • String类能否被继承呢? 答案是能的 String类的方法头是:Public final class String extends Object 之所以不能被继承就是因为其中的修饰关键字...final修饰的时候 ,这个不能被继承中所有的方法也就被...
  • String 不能被继承原因

    千次阅读 2019-01-24 16:22:57
    String类被final修饰不能被继承
  • String是否能被继承

    千次阅读 2018-10-23 19:50:36
    String是一个,而不是接口,这里说的不能被集成指的是能extends。 String不能被继承,因为它是final的。 String的完整签名是 public final class String
  • string类为什么不能不继承

    千次阅读 2016-09-25 11:02:36
    答案: 可以,因为String类有final修饰符,而final修饰的不能被继承的,实现细节允许改变。 public final class String implements java.io.Serializable, ComparableString>, CharSequence 11 详细...
  • c#中不能继承String类

    千次阅读 2014-01-10 16:29:15
    String类是密封,因此是允许继承的: [SerializableAttribute] [ComVisibleAttribute( true )] public sealed class String : IComparable, ICloneable, IConvertible, IComparable< string >, ...
  • String类型可以被继承吗,为什么

    千次阅读 2020-08-24 09:36:09
    可以,因为String类有final修饰符,而final修饰的不能被继承的,实现细节允许改变。 关于final修饰符,介绍如下: 根据程序上下文环境,Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰...
  • Java中是否可以继承String类,为什么

    千次阅读 2019-11-20 14:49:14
    不能被继承,因为String类有final修饰符,而final修饰的不能被继承的。 Java对String类的定义: public final class String implements java.io.Serializable, Comparable<String>, CharSequence { /...
  • String内容不能改变的理解 String的值不能修改的理解

    万次阅读 多人点赞 2016-03-20 09:24:43
     java中,String类的值声明后是不能修改,有些初学者就难以理解,为什么下面程序明明是修改了String对象的内容,为什么还可以正常运行? public class JavaTest { public static void main(String[] args) { ...
  • 是否可以继承String类

    千次阅读 2018-11-12 09:55:19
    可以,因为String类有final修饰符,而final修饰的不能被继承的,实现细节允许改变。 public final class String implements java.io.Serializable, Comparable, CharSequence ...
  • Java - 是否可以继承String类

    万次阅读 2019-03-08 14:45:09
    分享一个大牛的人工智能教程。...String类是final可以被继承。 补充:继承String本身就是一个错误的行为,对String类型最好的重用方式是关联关系(Has-A)和依赖关系(Use-A)而不是继承关系(Is-A)。 ...
  • 抽象类不能继承接口

    千次阅读 2017-09-21 10:21:43
    1. 抽象可以继承普通,但可以继承接口。 (public abstract class 抽象 extends 普通 { }) 2. 接口可以继承多接口,但可以继承抽象。 (public abstract class 接口1 extends 接口2,接口3 ,接口4{ }...
  • String类不可变以及可变总结

    千次阅读 2017-10-01 20:11:38
    String类在java中是immutable(可变),因为它关键字final修饰。当String实例创建时就会初始化,并且以后无法修改实例信息。String类是工程师精心设计的艺术品。 一、String为什么可变? 要了解String类...
  • 可以,但在应用的时候,需要用自己的加载器去加载,否则,系统的加载器永远只是去加载jre.jar包中的那个java.lang.String。由于在tomcat的web应用程序中,都是由webapp自己的加载器先自己加载WEB-INF/classess...
  • String类详解

    万次阅读 2019-04-03 22:33:18
    1.String类:即字符串,其主要构造方法为:  String(String Original),把字符串封装成字符串对象;  举例:String s1 = new String(“hello”);  String(char[] value),把字符数组的数据封装成字符串对象;  ...
  • 枚举类能继承吗?能被继承吗?

    千次阅读 2019-07-19 00:38:25
    枚举的作用:限定“数据集”中...1.枚举也是,也可以有自己的成员变量,成员方法,静态方法、静态变量等,也实现其他的接口,不能继承其他了(因为已经继承了java.lang.Enum)。枚举的对象默认都是public...
  • String类可以被继承吗?我们来聊聊final关键字! String在java基础知识中绝对是个重点知识,关于String的一些问题也是非常的多,而且牵涉到内存等高级知识,在面试中也是经常考察的一个点,那么我们今天就来...
  • String类是否可以被继承

    千次阅读 2017-02-14 09:06:18
    String类是final,所以可以被继承
  • String不能被继承

    千次阅读 2007-11-12 21:48:00
    String是一个,而不是接口,这里说的不能被集成指的是能extends。String不能被继承,因为它是final的。 String的完整签名是public final class Stringextends Objectimplements Serializable, ComparableString>...
  • final修饰的,可以被继承,所以不会别其它改变,这样会更加的安全. 二.string是共享在常量池中的,String str="abc", char data[] = {'a', 'b', 'c'};是等价的,他们都放在了字符串常量池中. 衍生...
  • java中私有属性能不能被继承

    千次阅读 2019-11-26 13:22:52
    java中私有属性能不能被继承? 先来看代码: class Person { private String name = "wanghan"; private void print() { System.out.println("执行的是父类中的方法!"); } public void fun(){ this....
  • 面试官:String类为什么设计为可变的?

    千次阅读 多人点赞 2020-06-20 16:17:19
    从哪看出来String类可变的? public final class String implements java.io.Serializable, Comparable<String>, CharSequence { /** The value is used for character storage. */ private final char...
  • C++中定义一个不能被继承

    千次阅读 多人点赞 2015-08-31 10:56:16
    最开始是从构造函数开始着手(先声明这种方法能定义一个不能被继承,这是一种错误的方法,但是很容易往这方面想),假设存在下面的继承体系: 现在假设B是一个不能被继承,那么如果存在B的子类C,那么C的...
  • Java中的String类为什么可变

    千次阅读 2018-07-23 15:00:42
    1、什么是可变? java角度来讲就是说成final的。 String不可变如下图: 假设给字符串s赋值为abcd,第二次重新赋值为...1、首先String类是用final修饰的,这说明String不继承 2、其次String类的主力成员...
  • String类介绍

    千次阅读 多人点赞 2018-09-17 01:09:42
     String 为final类型可更改,不能被继承;  基本类型与String结合都会转换为String类型; 二、String两种赋值方式: 1)直接赋值:String str = " "; String str = "" 原理:  在 JVM...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,281,216
精华内容 512,486
关键字:

string类能不能被继承