密封类(Java17)


密封类(Java17)

是用来规定父类能被特定子类继承的类,与 final 相区别,final一旦定义就不能被所有类继承

定义

class 前面加 sealed 同时在类名后面加 permits 类名 表示其允许继承的子类:

public sealed class Person permits Student{
	}

要求

密封类型有以下要求:

  • 可以基于普通类、抽象类、接口,也可以是继承自其他接抽象类的子类或是实现其他接口的类等
  • 必须有子类继承,且不能是匿名内部类或是lambda的形式
  • sealed写在原来final的位置,但是不能和finalnon-sealed关键字同时出现,只能选择其一。
  • • 继承的子类必须显式标记为finalsealed或是non-sealed类型。

标准声明

父类

public sealed [abstract] [class/interface] 类名 [extends 父类] [implements 接口, ...] permits [子类, ...]{
		//里面的该咋写咋写
}

子类

public [final/sealed/non-sealed] class 子类 extends 父类 {   //必须继承自父类
			//final类型:任何类不能再继承当前类,到此为止,已经封死了。
  		//sealed类型:同父类,需要指定由哪些类继承。
  		//non-sealed类型:重新开放为普通类,任何类都可以继承。
}

Author: havenochoice
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint policy. If reproduced, please indicate source havenochoice !
评论
  TOC