2 jacob1 1 Jacob1_1 于 2016.03.26 22:22 提问

为什么jdk中的类不能被重写啊?

是jvm有什么保护措施吗?我的意思就是,假设:我自己写一个String类会和jdk中的冲突,也就报错,写不了,为什么呢?跪求图片说明

4个回答

wojiushiwo945you
wojiushiwo945you   Ds   Rxr 2016.03.27 13:00
已采纳
  这是Java的类加载机制决定的,Java使用的是委托父类加载,所有的Java类库都是由指定的类加载器加载的,即使你定义一个一模一样的String类,最终引用加载的仍然是Java类库的类。这就是Java防止篡改的原理。
caozhy
caozhy   Ds   Rxr 2016.03.26 22:26

当然是这样,否则很可怕了。比如说你的程序中有一个加密的逻辑,有人编写一个恶意的插件程序,把随机数生成,甚至加密的库函数全部都重写了,你的程序的加密就失效了,这多可怕。
至于你说的String类,在java中定义为final类,所以也没办法通过派生重写。

luochoudan
luochoudan   Ds   Rxr 2016.03.26 23:20

String典型的不可变类,不可能被重写。

u013755250
u013755250   2016.03.27 12:28

干嘛要重写啊,继承就是了,当然,还有些类是不让继承的,string就是一个。并且jdk的东西人家已经打包成架包了,如果你修改了,你需要做的是,解压,修改,压缩,那就是另一回事了

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
JAVA中的static修饰的方法不能被重写
可以重写静态方法,但重写后的静态方法不支持多态。 其实static根本就没有重写之说。static方法引用的时候应该用类名来引用,而不是对象。同时static方法不参与继承,所以在继承体系里面也不存在重载的说法。 不能被重写,例子: class A{ public static void a(){ System.out.println("a"); } } class
为什么Java中类的成员变量不能被重写?
这篇文章讨论了Java面向对象概念中一个基本的概念--Field Hiding(成员变量隐藏) 成员变量在Java中能够被重写么? Let’s first take a look at the following example which creates two Sub objects. One is assigned to a Sub reference, the other is as
jdk中哪些类是不能继承的
不能继承的是类是那些用final关键字修饰的类。一般比较基本的类型或防止扩展类无意间破坏原来方法的实现的类型都应该是final的,在jdk中System,String,StringBuffer等都是基本类型。 为什么我继承非fianl修饰的类,也会编译错误呢?       因为Arrays这个类的默认构造方法是私有的  private Arrays() { }  同时,这类的所有
Java中为什么静态方法不能被重写?为什么静态方法不能隐藏实例方法?
问题描述Java中为什么静态方法不能被重写?为什么静态方法不能隐藏实例方法?诸如此类。前期准备首先理解重写的意思,重写就是子类中对父类的实例方法进行重新定义功能,且返回类型、方法名以及参数列表保持一致,且对重写方法的调用主要看实际类型。实际类型如果实现了该方法则直接调用该方法,如果没有实现,则在继承关系中从低到高搜索有无实现。那么问题又来了,为什么只能对实例方法才能重写?我头好晕,这两个问题在这互相
static方法可以被重写(覆盖)吗?
首先要强调,静态方法是不能被覆盖的。 原因: 在子类中,可以定义与父类同名的静态方法,不过并不存在“多态”,严格的说,方法间没有多态就不能称作“覆盖”。所以说,子类的静态方法,并没有覆盖父类的方法。 package com.ren.staticTest; public class StaticExtends { public static void main(Strin
关于静态方法为什么不能被重写的一点思考以及overload的一些坑。
重写”只能适用于可观察的实例方法.不能用于静态方法和final、private.对于静态方法,只能隐藏。一方面这是Java的规定,另一方面其实也有一定的道道这里边。首先谈谈java方法是何时绑定的 我们大家平时使用一个对象的方法时可能是这样的 Shape shape = new Rectangle(); shape.getArea(); 那么请问大家知道getArea是该调用父类Shape
为什么继承HttpSevlet类时不需要重写service 而要重写doGet doPost呢?
在学习Servlet的过程中,我们大多时候编码都是直接继承HttpServlet这个类,并且重写doGet ,doPost,但是查看Api时我们会发现Servlet接口 ,GenericSevlet抽象类 以及HttpServlet类中都有service方法,那么为什么我们继承HttpSevlet类时不要重写service 而要重写doGet doPost呢?service的作用是什么捏??正如上...
final 不能修饰抽象类 方法可以被重载 但不能被重写
1.final修饰变量,则等同于常量 2.final修饰方法中的参数,称为最终参数。 3.final修饰类,则类不能被继承 4.final修饰方法,则方法不能被重写。  final 不能修饰抽象类 final修饰的方法可以被重载 但不能被重写
Java继承机制中,关于构造器的重写
这里是一个结论性的东西:Java继承机制中,子类通过继承得到父类所有的属性和方法(如果是private的,也可以继承,只是不可以在子类中直接访问),包括构造器(因为构造器本身也是一种方法)。但是,在子类中不可以重写父类的构造器方法。原因在google之后,得到的解释是:构造器是在
简易Java(18):属性能否重写?为什么?
本文将给大家介绍面向对象编程中一个基本的概念–属性隐藏(Field Hiding)。 1、Java中,属性能否被覆盖? 来让我们看看下面的这个示例代码,它创建了两个子类实例:一个被赋值给子类引用,另外一个赋值给父类引用。 01 package com.diguage.books.simplejava.ar18;