首页 > 基础资料 博客日记
在Java中,关于final、static关键字与方法的重写和继承【易错点】
2024-10-01 06:00:07基础资料围观363次
文章在Java中,关于final、static关键字与方法的重写和继承【易错点】分享给大家,欢迎收藏Java资料网,专注分享技术知识
在Java中,关于final、static关键字与方法的重写和继承【易错点】
1.final方法不能被重写
如果父类中的方法被声明为final,那么这个方法就不能被子类重写。尝试在子类中定义与父类final方法同名、同参数列表、同返回类型(或子类型)的方法会导致编译错误。
class Parent {
final void show() {
System.out.println("Parent show()");
}
}
class Child extends Parent {
// 编译错误:无法重写final方法
@Override // @Override注解会触发编译器检查,但在这里不适用
void show() {
System.out.println("Child show()");
}
}
2.static方法不是重写,而是遮蔽
static方法不能被重写,因为在Java中,static方法是类方法,而不是实例方法。如果你在子类中定义了与父类同名的static方法,那么这实际上是在子类中遮蔽了父类的static方法,而不是重写它。
class Parent {
static void show() {
System.out.println("Parent show()");
}
}
class Child extends Parent {
// 这不是重写,而是遮蔽
static void show() {
System.out.println("Child show()");
}
}
3.final与static的组合
当一个方法同时被声明为final和static时,它仍然是一个类方法,不能被重写,也不能被子类中的同名方法所遮蔽(因为static方法总是通过类名来引用,所以子类中的同名static方法会被视为新的方法,而不是对父类方法的遮蔽)。但是,由于final的限制,这个组合实际上限制了任何尝试在子类中定义同名方法的尝试,因为final禁止了重写,而static则使得方法调用与实例无关。
class Parent {
final static void show() {
System.out.println("Parent show()");
}
}
class Child extends Parent {
// 尝试定义同名方法会导致编译错误,因为final禁止了重写,而static使得方法调用与实例无关
// static void show() { ... } // 编译错误
}
4.final与继承
==final类不能被继承。==如果你试图继承一个被声明为final的类,编译器会报错。
final class FinalClass {
// ...
}
class AnotherClass extends FinalClass {
// 编译错误:FinalClass是final的,不能被继承
}
5.static与继承
虽然static方法不能被重写,==但static变量(字段)是可以被子类继承的。==不过,子类不能直接修改继承自父类的static变量(除非在子类中声明了一个同名的static变量来遮蔽它)。子类可以通过类名来访问父类的static变量,也可以通过子类的类名来访问(如果子类没有遮蔽它的话)。
class Parent {
static int value = 10;
}
class Child extends Parent {
// 这里没有遮蔽Parent.value
// Child.value 仍然引用的是 Parent.value
}
总之,理解final、static以及它们与重写和继承之间的关系对于编写清晰、可维护的Java代码至关重要。
文章来源:https://blog.csdn.net/ZCY_c/article/details/142500410
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
标签:
相关文章
最新发布
- springboot~3.x项目中使用集成测试
- Java测试类、工具类与JavaBean对比解析
- SpringBoot-日志
- springboot~http2的支持
- 解疑释惑 - 日志体系之 slf4j + logback 组合(一)
- Web server failed to start. Port 8080 was already in use. 端口被占用
- Springboot 项目配置多数据源
- 伙伴匹配系统(移动端 H5 网站(APP 风格)基于Spring Boot 后端 + Vue3 - 05
- 剑指offer-23、搜索⼆叉树的后序遍历序列
- 一个表示金额的数字是 100000000L,这是多少米?