本视频是解读性视频,所以希望您已经看过了本知识点的内容,并且编写了相应的代码之后,带着疑问来观看,这样收获才多。 不建议一开始就观看视频
8分28秒 本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器。 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)。 chrome 的 视频下载插件会影响播放,如 IDM 等,请关闭或者切换其他浏览器 示例 1 : final修饰类 示例 2 : final修饰方法 示例 3 : final修饰基本类型变量 示例 4 : final修饰引用 示例 5 : 常量 示例 6 : 练习-final 示例 7 : 答案-final
当Hero被修饰成final的时候,表示Hero不能够被继承
其子类会出现编译错误 package charactor;
public final class Hero extends Object {
String name; //姓名
float hp; //血量
}
package charactor; public final class Hero extends Object { String name; //姓名 float hp; //血量 }
Hero的useItem方法被修饰成final,那么该方法在ADHero中,不能够被重写
package charactor;
import property.Item;
public class Hero extends Object {
String name; //姓名
float hp; //血量
float armor; //护甲
int moveSpeed; //移动速度
public final void useItem(Item i){
System.out.println("hero use item");
i.effect();
}
public Hero(){
System.out.println("Hero的无参的构造方法 ");
}
public Hero(String name){
System.out.println("Hero的有一个参数的构造方法 ");
this.name = name;
}
public static void main(String[] args) {
new Hero();
}
}
final修饰基本类型变量,表示该变量只有一次赋值机会
16行进行了赋值,17行就不可以再进行赋值了 package charactor;
public class Hero extends Object {
String name; //姓名
float hp; //血量
float armor; //护甲
int moveSpeed; //移动速度
public static void main(String[] args) {
final int hp;
hp = 5;
hp = 6;
}
}
package charactor; public class Hero extends Object { String name; //姓名 float hp; //血量 float armor; //护甲 int moveSpeed; //移动速度 public static void main(String[] args) { final int hp; hp = 5; hp = 6; } }
final修饰引用
h引用被修饰成final,表示该引用只有1次指向对象的机会 所以17行会出现编译错误 但是,依然通过h引用修改对象的属性值hp,因为hp并没有final修饰 package charactor;
public class Hero extends Object {
String name; //姓名
float hp; //血量
float armor; //护甲
int moveSpeed; //移动速度
public static void main(String[] args) {
final Hero h;
h =new Hero();
h =new Hero();
h.hp = 5;
}
}
常量指的是可以公开,直接访问,不会变化的值
比如 itemTotalNumber 物品栏的数量是6个 package charactor;
public class Hero extends Object {
public static final int itemTotalNumber = 6;//物品栏的数量
String name; //姓名
float hp; //血量
float armor; //护甲
int moveSpeed; //移动速度
public static void main(String[] args) {
final Hero h;
h =new Hero();
h.hp = 5;
}
}
设计一个类SomeString,继承 String类。 能否继承?
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
本视频是解读性视频,所以希望您已经看过了本答案的内容,带着疑问来观看,这样收获才多。 不建议一开始就观看视频
1分55秒 本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器。 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)。 chrome 的 视频下载插件会影响播放,如 IDM 等,请关闭或者切换其他浏览器
不能继承,因为String类是final的。 所以不能被继承
String被设计为final是有原因的,因为String这个类使用得实在是太广泛了,如果能够被继承,就意味着其子类可以随意重写其非final的方法,这些方法就有可能变得和期望的不一样,比如toString始终返回空。 这样就给软件逻辑带来了很大的不确定性因素。 为了规避这种不确定性因素,索性让String类不能被继承,间接地就不存在子类重写其方法的问题了。 public class SomeString extends String{
}
public class SomeString extends String{ }
HOW2J公众号,关注后实时获知最新的教程和优惠活动,谢谢。
问答区域
2021-07-10
2021-7-10-PM-5-00
7 个答案
木宇 跳转到问题位置 答案时间:2024-05-04 不能 String被final修饰不能被继承
hncj指尖风雨 跳转到问题位置 答案时间:2023-12-29 不能,String类是被final修饰的,而被final修饰的类不可以被继承
wangha 跳转到问题位置 答案时间:2023-06-25 不能够,由于String类有final修饰符,而final修饰的类是不能被继承的
起个名 跳转到问题位置 答案时间:2023-04-09 111
public class SomeString extends String { // 类型 SomeString 不能成为终态类 String 的子类 } 阿文6 跳转到问题位置 答案时间:2022-10-23 不能被继承
public class SomeString extends String {//The type SomeString cannot subclass the final class String } 芬达味橘猫 跳转到问题位置 答案时间:2022-05-11 源码
public final class String implements java.io.Serializable, Comparable<String>, CharSequence, Constable, ConstantDesc { Elements_Make 跳转到问题位置 答案时间:2021-11-13 String类是终态类不能继承
回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
2020-07-21
答案
4 个答案
晚安嘛 跳转到问题位置 答案时间:2024-03-05 开源去掉final,真是大佬 膜拜膜拜
564743087 跳转到问题位置 答案时间:2021-03-10 java 不是开源的吗?去掉 final 应该可以吧?
jay1234 跳转到问题位置 答案时间:2020-09-15 不能,因为String类是被final修饰的
豆豆520 跳转到问题位置 答案时间:2020-07-30 答案
不能,因为String类是final修饰的,不能被继承
回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
2020-06-29
不用final修饰 String类不就可以继承了嘛
2020-03-11
肯定不能被继承,String类是被final修饰的,哈哈!
2020-01-19
final的作用
提问太多,页面渲染太慢,为了加快渲染速度,本页最多只显示几条提问。还有 13 条以前的提问,请 点击查看
提问之前请登陆
提问已经提交成功,正在审核。 请于 我的提问 处查看提问记录,谢谢
|