-
2021-02-28 12:03:58
在java中有一些类并不能被继承,我们可以通过这些不能继承的类设计一些只读的不可变类。Java中不能被继承的类有哪些?
在Java中,只要是被定义为final的类,也可以说是被final修饰的类,就是不能被继承的。
这是final的规定:当你将final用于类身上时,一个final类是无法被任何人继承的,那也就意味着此类在一个继承树中是一个叶子类,并且此类的设计已被认为很完美而不需要
进行修改或扩展。对于final类中的成员,你可以定义其为final,也可以不是final。而对于方法,由于所属类为final的关系,自然也就成了final型的。你也可以明确的给final
类中的方法加上一个final,但这显然没有意义。
例如:我们使用的String类,它也是不可被继承的类。
那我们就一起来看看这个问题,首先我们要知道,如果你要判断一个类是否可以被继承的话,你要知道这个类是如何被定义的,所以我们先来看看这个String类是如何被定义的:
以上就是这个String类的定义方式,我们可以明显的看到一个final修饰符!
如果说整个类都是final(在它的定义前冠以final关键字),就表明自己不希望从这个类继承,或者不允许其他任何人采取这种操作。换言之,出于这样或那样的原因,我们的类肯定不需要进行任何改变;或者出于安全方面的理由,我们不希望进行子类化(子类处理)
更多相关内容 -
Java 类不可被继承的几种方法
2021-06-30 13:27:101.final 修饰符 public final class NoModifer { //没有修饰符 默认为包内可见 ...最常用的,被final 修饰符修饰的类,不可以被继承 2.private 构造方法 package com.xinyu.test.java.Test; public class1.final 修饰符
public final class NoModifer { //没有修饰符 默认为包内可见 int age = 10; public NoModifer(){ } }
public class Nomodifer2 extends NoModifer{ }
最常用的,被final 修饰符修饰的类,不可以被继承2.private 构造方法
package com.xinyu.test.java.Test; public class NoModifer { //没有修饰符 默认为包内可见 int age = 10; private NoModifer(){ } }
package com.xinyu.test.java.Test; public class Nomodifer2 extends NoModifer{ }
构造方法私有的类,不可以被继承。因为继承的类,一定要调用父类的构造方法。注意:就算构造方法是私有的,但是如果继承类为内部类,那么也是可以继承私有构造方法的父类的
public class NoModifer { //没有修饰符 默认为包内可见 int age = 10; private NoModifer(){ } private void test(){} public class NoModifer2 extends NoModifer{ public void test2(){ NoModifer.this.test(); } } }
-
java中不能继承的类有哪些?
2021-02-12 17:13:35在Java中,只要是被定义为final的类,也可以说是被final修饰的类,就是不能被继承的。因为jdk的开发者认为,有一些最基本的类没要必要对开发者开放,如果用户继承时操作有误,很可能引入很多问题。为了防止用户对...在Java中,只要是被定义为final的类,也可以说是被final修饰的类,就是不能被继承的。
因为jdk的开发者认为,有一些最基本的类没要必要对开发者开放,如果用户继承时操作有误,很可能引入很多问题。为了防止用户对基本类进行相应的扩展,也体现了java设计过程中的开闭原则,最终将这些类设计成为final的。
这是final的规定:当你将final用于类身上时,一个final类是无法被任何人继承的,那也就意味着此类在一个继承树中是一个叶子类,并且此类的设计已被认为很完美而不需要
进行修改或扩展。对于final类中的成员,你可以定义其为final,也可以不是final。而对于方法,由于所属类为final的关系,自然也就成了final型的。你也可以明确的给final
类中的方法加上一个final,但这显然没有意义。
java中常见的不能被继承的类有如下:String,
StringBuffer,
StringBuilder,
基本类型的包装类如Double,Integer,Long
等等。
我们来看看这个String类是如何被定义的:
以上就是这个String类的定义方式,我们可以明显的看到一个final修饰符!
如果说整个类都是final(在它的定义前冠以final关键字),就表明自己不希望从这个类继承,或者不允许其他任何人采取这种操作。换言之,出于这样或那样的原因,我们的类肯定不需要进行任何改变;或者出于安全方面的理由,我们不希望进行子类化(子类处理)
-
浅谈Java之终止继承:Final类和Fianl方法
2021-02-13 02:27:25Final类当关键字final用来修饰类时,其含义是该类不能再派生子类,换句话说,任何其他类都不能继承用final修饰的类,即使该类的访问权限为pubilc类型,也不能被继承;否则,将编译报错。只有当需要确保类中的方法都...前言
关键字Final不仅可以用来修饰变量,而且对类及其方法的继承也有很大的影响,本文将从类与方法两个方面介绍final关键字的功能。
Final类
当关键字final用来修饰类时,其含义是该类不能再派生子类,换句话说,任何其他类都不能继承用final修饰的类,即使该类的访问权限为pubilc类型,也不能被继承;否则,将编译报错。
只有当需要确保类中的方法都不被重写时才应该建立最终(final)类,final关键字将会为这些方法提供安全,没有任何人能够重写final类中的方法,因为不能继承。
例:
package chapeter04;
final class Father { }
public class Sample3_13 extends Father
{
public static void main(String[] args)
{
}
}
报错:
可以看出,编译找不到Father类。
Final方法
当关键字final修饰方法后,该方法在子类中将无法重写,只能继承,例:
package chapeter04;
class Father
{
public final void show()
{
System.out.println("我是final方法,可以被继承,但是不能被重写");
}
}
class Son extends Father { }
public class Sample4_15
{
public static void main(String[] args)
{
// TODO Auto-generated method stub
Son s= new Son();
s.show();
}
}
运行结果:
可以看出,代码正常编译运行,final的方法show被成功继承。但是若图将final的方法在子类中重写,将会编译报错:
class Son extends Father
{
public void show()
{
System.out.println("重写Final方法");
}
}
可以看出final的方法不能被继承。
要恰当使用final方法,只有在子类覆盖某个方法会带来问题时,再将此方法设置为final方法,一般情况下不必使用。因为防止子类覆盖会丢失一些面向对象的优点,包括通过覆盖实现的可扩展性。
以上所述是小编给大家介绍的Java之终止继承:Final类和Fianl方法详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!
-
C# 不可继承的类_密封类sealed_静态类static
2019-02-17 23:26:31using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace sealedDemo ... //密封类,不允许继承 public static class CSealed // static { public static vo... -
如何让类不能被继承
2021-03-10 15:48:51方法一:借助 final 关键字,用该关键字修饰的类不能被继承。 #include <iostream> using namespace std; class Base final { }; class Derive: public Base{ // error: cannot derive from 'final' base '... -
一直都知道final修饰的类不能被继承,但是不知道为什么不能被继承!
2017-08-09 08:59:09首先你要知道自己为什么要用final,用final干什么! 6.8.2 final方法 之所以要使用final方法,可能是出于对两方面理由的考虑。第一个是为方法“上锁”,防止任何继承类改变它的本来含义。设计程序时,若希望一个方法... -
String类能不能被继承?为什么?(final关键字的理解)
2020-11-15 15:32:07答案是不能被继承。下面来看看究竟是为什么? Java中对String类的定义: public final class String implements java.io.Serializable, Comparable<String>, CharSequence { /** The value is used for ... -
java抽象类 继承
2021-03-08 06:02:32关于java抽象类 继承的搜索结果回答抽象类和接口的区别:默认的方法实现抽象类可以有默认的方法实现完全是抽象的。接口根本不存在方法的实现。抽象类中可以有已经实现了的方法,也可以有被abstract修饰的方法(抽象... -
java中被final修饰的类不能被继承
2018-11-05 17:29:23final方法 之所以要使用final方法,可能是出于对两方面理由的考虑。第一个是为方法“上锁”,防止任何继承类改变它的本来含义。设计程序时,若希望一个方法的...不变,而且不可被覆盖或改写,就可以采取这种做法。 ... -
Java提升学习(二):构造方法,类的继承,封装
2020-12-21 14:48:15构造方法没有返回类型,更不能定义为void,不可加其他修饰符。 若没有被定义,则在编译的时候,会自动加上一个默认的构造方法,但是不会有任何操作。 可重载多个构造方法。 示例: 修饰符 构造方法名(参数列表){ //... -
final类可以继承其他类吗
2021-02-26 12:48:18设计程序时,若希望一个方法的行为在继承期间保持不变,而且不可被覆盖或改写,就可以采取这种做法。采用final方法的第二个理由是程序执行的效率。将一个方法设成final后,编译器就可以把对那个方法的所有调用都置入... -
类什么情况下不可以被继承
2017-06-14 17:23:111、如果类被final修饰,那么此类不可以被继承。 2、如果类中只有private的构造方法,那么此类不可以被继承。 其原因在于: (1)一个类一定会有构造函数,如果不写,那就是默认的无参构造函数,如果写,就... -
String被设计成不可变和不能被继承的原因
2017-02-17 22:31:12我们知道在Java中,String是不可变的、final的。Java在运行时也保存了一个字符串池(String pool),这使得String成为了一个特别的类。 主要是为了 “ 效率 ” 和 “ 安全性 ” 的缘故。 若 String 允许... -
String 类能不能被继承?为什么?
2021-08-07 09:53:40不能,因为String类是被final修饰的类型,final类是不能被继承的,String类是不可变类型(Immutable)类。 至于为什么要加final或将String类设置成不可变类,主要是两点: 第一个原因是线程安全:不可变对象始终是... -
final修饰的方法能否被继承?能否被重载?能否被重写?final修饰的类能否被继承?
2019-07-02 22:32:31final修饰的类,为最终类,该类不能被继承。如String 类 2. final修饰的方法可以被继承和重载,但不能被重写 3. final修饰的变量不能被修改,是个常量 举例说明: public class Person { private S... -
String类为什么不能被继承
2020-03-26 17:34:38我们都知道String类不能被继承,但为什么不能却不能回答地很完整。 首先我们可以看下String的源码(部分): public final class String implements java.io.Serializable, Comparable<String>, CharSequence { ... -
Java外部类为什么不能用private,protected修饰
2019-03-31 22:21:30默认的修饰符(default)可以保证该外部类可被同一包的其它类使用。 public可以使该类在同一工程的任意位置(本包和其它包)中使用。 若声明为private,该类不能被任何其它类调用,则失去了在实际应用中的意义(一... -
String类能被继承吗,为什么?
2021-12-23 11:05:16当用final修饰一个类时,表明这个类不能被继承。final类中的成员变量可以根据需要设为final,但是要注意final类中的所有成员方法都会被隐式地指定为final方法。 2.修饰方法 使用final修饰方法的原因有两个。第一... -
java学习笔记(12-继承、抽象类)
2021-03-15 17:45:411.继承关键字extendsjava中继承特点:在Java中,类只支持单继承,不允许多继承,也就是说一个类只能有一个直接父类多个类可以继承一个父类在Java中,多层继承是可以的,即一个类的父类可以再去继承另外的父类,例如C... -
kotlin基础教程之类和继承
2020-08-30 11:18:39主要介绍了kotlin基础教程之类和继承的相关资料,需要的朋友可以参考下 -
Java 类和接口的继承
2021-02-12 14:00:34继承的概念继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。继承的主要作用在于,在已有基础上继续进行功能的扩充。继承的特性... -
String类为什么要设计成final?不可变有什么优点?
2018-10-09 13:52:06先贴一下String类的申明代码: public final class String implements java.io.Serializable, Comparable<String>, CharSequence {} 它最大的一个特点是被final修饰了。我们先看看官方怎么解释: ... -
Java中的String类为什么不可变
2018-07-23 15:00:421、什么是不可变? java角度来讲就是说成final的。 String不可变如下图: 假设给字符串s赋值为abcd,第二次重新赋值为...1、首先String类是用final修饰的,这说明String不可继承 2、其次String类的主力成员... -
String类不可变以及不可变类总结
2017-10-01 20:11:38String类在java中是immutable(不可变),因为它被关键字final修饰。当String实例创建时就会被初始化,并且以后无法修改实例信息。String类是工程师精心设计的艺术品。 一、String为什么不可变? 要了解String类... -
抽象类不能继承接口
2017-09-21 10:21:431. 抽象类可以继承普通类,但不可以继承接口。 (public abstract class 抽象类 extends 普通类 { }) 2. 接口可以继承多接口,但不可以继承抽象类。 (public abstract class 接口1 extends 接口2,接口3 ,接口4{ }... -
面试题系列之接口是否可继承接口?...抽象类是否可继承具体类?抽象类中是否可以有静态的main方法?
2020-05-20 18:33:06抽象类是否可继承具体类?抽象类中是否可以有静态的main方法? 上面这个题目我们来慢慢的剖析一下。先从基本的概念说起。 一、接口 官方解释:Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的... -
TS中类与类的继承、修饰符
2019-07-10 17:37:181、ts定义类 class class Person { public name: string //属性 public关键词可省略 constructor(name: string) { //构造函数 实例化触发的方法 this.name = name; } getName(): string { return this.name; } set... -
是否可以继承String类
2022-04-11 14:00:34String 类是 final 类,不可以被继承。 当我们鼠标悬浮String关键字上,按住ctrl键,鼠标点击可以看见这样一串代码: -
javascript 的七种继承方式(七)类的继承
2020-08-25 15:53:25前面我们已经介绍了javascript中6种继承方式,这6中继承方式都是基于es5的,那么接下来我们要讲的是es6中新增的一种继承方式—— 类的继承 类 在es6中新引进了类的概念,作为对象的模板。类是对现实生活中一类具有...