当前位置: 首页 > news >正文

在Java中,关于final、static关键字与方法的重写和继承【易错点】

在Java中,关于final、static关键字与方法的重写和继承【易错点】

  • 1.final方法不能被重写
  • 2.static方法不是重写,而是遮蔽
  • 3.final与static的组合
  • 4.final与继承
  • 5.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代码至关重要。


http://www.mrgr.cn/news/35593.html

相关文章:

  • pycharm报错:no module named cv2.cv2
  • 【css】html里面的图片宽度设为百分比,高度要与宽度一样
  • NLP论文速读(NeurIPS2024)|使用视觉增强的提示来增强视觉推理
  • goframe开发一个企业网站 验证码17
  • C++并发编程
  • json转excel,读取json文件写入到excel中【rust语言】
  • 点亮城市安全:高科技助力精准定位路灯漏电‘隐形杀手
  • 2024年CSP-J认证 CCF信息学奥赛C++ 中小学初级组 第一轮真题-阅读程序题解析
  • 实战OpenCV之图像滤波
  • 构建预测睡眠质量模型_相关性分析,多变量分析和聚类分析
  • Cloudflare为网站添加AI审计 可检查AI爬虫何时抓取和抓取频次以及直接屏蔽爬虫
  • 从准备面试八股文,感悟到技术的本质
  • GNU链接器(LD):存储命令(MEMORY)用法及实例解析
  • 公安局软件管理平台建设方案和必要性,论文-3-———未来之窗行业应用跨平台架构
  • Python | Leetcode Python题解之第435题无重叠区间
  • LeetCode从入门到超凡(三)回溯算法
  • 风力发电机叶片表面缺陷识别检测数据集yolo数据集 共7000张
  • Python | Leetcode Python题解之第434题字符串中的单词数
  • 深入理解端口、端口号及FTP的基本工作原理
  • 揭秘高效编程工具的选择与使用
  • 第18届全国热管会议举办,积鼎科技分享「环路热管相变传热仿真」前沿实践
  • 【有啥问啥】 Self-Play技术:强化学习中的自我进化之道
  • 0基础学习HTML(十七)字符字体
  • 【中台设计】数字中台,大数据中台解决方案,中台建设指南(资料Word分享)
  • C语言 | Leetcode C语言题解之第434题字符串中的单词数
  • 【工作流集成】springboot+vue集成工作流activiti,flowable,智能审批系统,集成方案(源码)