子类在调用父类的私有方法中不能直接调用,但是可以通过get方法进行调用,修改属性的值可以通过set方法进行修改。而子类想要修改父类中的方法可以使用方法重写进行操作。

方法重写与之前的方法重载不同

回顾一下方法重载,相同的方法名不同参数类型和参数数量以及参数顺序

package Demo1;
import java.util.Arrays;
public class Demo011 {public static void main(String[] args) {Demo011 D11=new Demo011();D11.demo(12,232,43,3);     //4个实际参数,则调用第三个demo方法}public void demo(int a,int b){System.out.println(a+b);}public void demo(int a,int b,int c){System.out.println(a+b+c);}public void demo(int...ints){System.out.println(Arrays.toString(ints));}
}

方法重写

重写都是方法的重写与属性无关

package Demo1;
public class Demo012 {public static void main(String[] args) {B b =new B();b.demo();}
}
class A{public static void demo(){System.out.println("Ademo");}
}
class B extends A{public static void demo(){System.out.println("Bdemo");}
}

执行结果:

Bdemo

父类的引用指向子类进行引用

    public static void main(String[] args) {//方法的调用只和数据类型有关B b =new B();        //调用的是B类的静态方法b.demo();//父类的引用指向子类A a = new A();        //调用的是A类的静态方法a.demo();}

执行结果:

Bdemo
Ademo

使用快捷键Alt+insert快速生成重写方法


Override重写方法

class A{public  void demo(){System.out.println("Ademo");}
}
class B  extends A{@Override   //注解,有功能的注释public void demo() {super.demo();     //默认调用父类的demo()方法}
}

使用Override重写默认是调用父类的方法,我们可以在重写方法中调用自己的方法

class A{public  void demo(){System.out.println("Ademo");}
}
class B  extends A{@Overridepublic void demo() {//super.demo(); 默认调用父类的demo()方法输出AdemoSystem.out.println("Bdemo");}
}

重写之后执行结果:

Bdemo
Bdemo

子类重写父类的demo()方法之后输出为demoB,但是并不是子类重写之后将父类的方法修改了,子类在进行调用的时候调用的是重写后父类的方法

package Demo3;public class demo005 {public static void main(String[] args) {DemoB DB =new DemoB();DB.demo();        //调用子类的demoDemoA DA=new DemoA();   //调用父类的demoDA.demo();}
}
class DemoA{public void demo(){System.out.println("demoA");}
}
class DemoB extends DemoA{      //继承@Overridepublic void demo(){System.out.println("demoB");}
}

执行结果:

demoB
demoA

但是我可以完全不继承父类也能输出demoB,demoA

package Demo3;public class demo005 {public static void main(String[] args) {DemoB DB =new DemoB();DB.demo();DemoA DA=new DemoA();DA.demo();}
}
class DemoA{public void demo(){System.out.println("demoA");}
}
class DemoB{        //A与B没有继承关系public void demo(){System.out.println("demoB");}
}

执行结果:

demoB
demoA

两种方式有什么区别呢?
1.子类继承父类重写方法,是通过子类调用父类的方法进行重写的,子类执行结果也是重写后的方法,但并不是子类把父类的方法修改了
2.方式二是在两个不同类下创建demo()方法,通过对象进行调用。

父类方法若添加static修饰符则重写失败提示错误

进行方法重写时静态方法和非静态方法的区别很大,如果是加了static静态方法,调用结果之和左边定义的类有关。方法重写与非静态方法有关

私有方法无法进行方法重写,重写的关键词只能是public不能是private私有的

重写小结:

  1. 方法重写需要有继承关系,子类重写父类的方法
  2. 子类方法与父类的方法 方法名和修饰符必须相同
  3. 以及方法的参数列表必须相同,不相同则为方法重载
  4. 修饰符范围可以扩大但是不能缩小,private(小)–>proteated–>default–>public(大)
  5. 重写可能会抛出异常,异常范围可以被缩小但不能扩大

为什么需要重写?

  • 父类的功能子类不一定需要或者不一定满足,父类的东西太多了子类可能只需要一点

快捷键Alt+insert

快速创建Override

java全栈系列之JavaSE-面向对象(方法重写)037相关推荐

  1. java全栈系列之JavaSE--冒泡排序028

    冒泡排序是在一组数组中将相邻的两个元素进行比较,可以按由大到小或者由小到大的循序排列, 冒泡排序示意图: 每循环一次相邻的两个数进行大小比较,若由小到大的循序则大的数据在小的数据右侧 冒泡排序流程图 ...

  2. Java全栈系列笔记

    Java全栈系列笔记 全部文档.项目.源码: github:https://github.com/name365/Blog-Java 码云:https://gitee.com/yang365/Blog ...

  3. Java全栈学习day05(面向对象02)

    1.继承 继承的概念 实现代码的重用,子类继承父类的一切属性和方法(除了构造方法),父类的私有属性.方法不能直接使用,需要get和set. package com.test;public class ...

  4. java全栈系列之JavaSE-面向对象(抽象类)041

    通过abstract修饰符来修饰的类则为抽象类,如果修饰方法则为抽象方法 抽象类定义格式: abstract class demo0005 { //在类的前面加abstract修饰符则该类为抽象类 } ...

  5. java全栈系列之JavaSE-面向对象(方法的定义与调用)030

    java面向对象编程 面向对象&面向过程 前言: 之前的代码大多数都是属于面向过程的,在程序中有main()方法也叫主方法,程序会由上至下执行main()里面的内容.程序里的方法:例如编写一个 ...

  6. java全栈系列之JavaSE--数组的三种初始化方法及内存分析024

    java内存分析 堆中存放new出来的对象和数组,存放具体的值的变量存放在栈里面 在定义和创建数组的时候内存发生了什么? 当用户定义了一个数组,例如:int [ ] Array;只是定义了一个数组没有 ...

  7. java全栈系列之JavaSE-面向对象(继承详解)035

    类的继承 java三大特性之一的继承,指的是子类继承父类的属性和方法,java类中只有单继承没有多继承,比如说:一个父亲(父类)可以有多个儿子(子类),但是一个儿子(子类)只能有一个父亲(父类) 在类 ...

  8. java全栈系列之JavaSE-面向对象(封装详解)034

    封装数据的隐藏 通常,应禁止直接访问一个对象中的数据的实际表示,而应通过操作接口来访问,这种称为信息隐藏 封装的意义: 提高数据的安全性,保护数据 隐藏代码的实现细节 统一接口 系统的可维护性增加了 ...

  9. java全栈系列之JavaSE-面向对象(异常详解)043

    Exception可以被程序处理的异常 异常指的是程序在运行中出现了无法预料的状况,异常发生在程序运行期间.程序中可以选择捕获异常,也可以不处理使用默认的异常 算术异常 通常是由于算术计算错误导致的 ...

最新文章

  1. 设置flashfxp选中ftp密码的时候显示出来看
  2. 1036: [ZJOI2008]树的统计Count
  3. Nacos Go 微服务生态系列(一)| Dubbo-go 云原生核心引擎探索
  4. springboot拦截请求路径_SpringBoot整合Ant Design Pro进行部署
  5. Win10 Build 11099和11102的更动超过1200项
  6. int main() 与 void main()
  7. python基本命令range_Python的Range()函数(指南)
  8. c语言水库抽样算法代码,LeetCode---蓄水池抽样算法
  9. SpringBoot中Interceptor和Filter的使用
  10. android自动清理内存不足,安卓手机越用越卡,清理内存也没用?原因其实是这个!...
  11. java 毫秒转分钟和秒_毫秒转换为天、小时、分、秒
  12. 开源规则引擎Drools、URule简介
  13. htmla标签下划线去除_div css网页开发布局时a标签去掉下划线
  14. 怎么查看计算机簇大小,分区格式与簇的大小讲解
  15. 数据库统计函数 COUNT
  16. 论文笔记:Visual Domain Adaptation with Manifold Embedded Distribution Alignment
  17. SAP ABAP alv中设置回车事件
  18. 五种3DMAX使用版本区别比较(一)
  19. 六、常用的sql语句
  20. 【全国计算机等级考试二级教程——C语言程序设计(2021年版)编程题答案-第8章】

热门文章

  1. matlab程序 地震 相干噪声_地震资料读写相干噪声的消除
  2. Python爬虫实践2,企业工商信息查询
  3. 量子力学,在生命的世界里
  4. 笔记本电脑快速连接手机热点的方法
  5. 计算机中的光学知识,科学网—光学基础知识大讲堂 ——第3期:详解电磁辐射 - 何卓铭的博文...
  6. java/php/net/python养花助手平台设计
  7. gmtime ()函数
  8. c语言sqlserver数据库头文件,Mysql的C语言API进行数据库编程
  9. 结语【To be continued】
  10. 企业如何建设网站之基础建站教程