全部
技术
PHP
MySQL
前端
Linux
JAVA
工具
纪念日计算器
邮记星
个人记账
笔记侠
历史上的今天
生日密码
生日书
生日密码
生日花语
博古通今
三十六计
鬼谷子
笑林广记
本草纲目
山海经
唐诗宋词
宋词300首
唐诗300首
退出
登录
注册
编辑文章
选择分类
PHP
MySQL
前端
Linux
Java
工具
选择专栏
设计模式
java基础
Angular学习
Java面试题
描述:
Java覆写相关概念
封面图上传 :
+
点击上传图片
### Java覆写 子类定义的方法和属性和父类同名,这种情况就叫做**覆写**,其中有两种情况: - 方法覆写 - 属性覆盖 #### 1.方法覆写 当子类定义了与父类方法名称,返回类型和参数一致的方法是,我们就称为方法覆写了 - 发生覆写时,会执行该子类覆写的方法,如果没有覆写,那么就执行父类的方法 **覆写使用原则:** 当发现父类方法的功能不足,或者无法满足要求时,就需要采用覆写来满足功能要求 **覆写要求:** - 覆写的方法不能拥有比父类更严格的访问控制权限。 访问控制权限 **public> protected>default>private**,即当父类的方法声明为public时,子类覆写的方法只能时public,当父类的方法声明为default时,子类方法只能时default或者public. **疑问:**如果父类的方法为private,子类定义为public 这算覆写吗? 这个时候不叫覆写,由于private 方法在子类是不可见的,就算子类中定义一个完全符合覆写要求的方法,那么也不能覆写,顶多就是子类定义了要给新方法。 ```java class A{ private String name; public void fun(){ print(); } private void print(){ System.out.println("我是A类"); } } class B extends A{ public void print(){ System.out.println("我是B类"); } } public class TestExtend{ public static void main(String[] arg){ B b = new B(); b.fun();//结果: 我是A类 } } ``` 需要在覆写中调用父类被覆写的方法 使用 **super.方法名称()** --- **小拓展 super.方法名称()和 this.方法名称()的区别** - 使用 **this.方法名称()** 会先查找本类中存不存在该方法名称的方法,如果存在直接调用,如果不存在,值查找父类中存不存在,存在则调用,如果父类中都不存在,那么会发生编译时错误。 - 使用 **super.方法名称()** 不查找本类中该方法名称的方法,直接调用父类中该方法名称方法 #### 2.属性覆盖 如果子类定义了和父类完全相同名称的属性,就属于属性覆盖
保存文章