PHP技术那点事
全部
技术
PHP
MySQL
前端
Linux
JAVA
退出
编辑文章
选择分类
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.属性覆盖 如果子类定义了和父类完全相同名称的属性,就属于属性覆盖
保存文章