解析java中的方法重写

1 含义

子类继承父类后,可以在子类中书写一个与父类同名同参的方法,从而实现对父类中同名同参数的方法的覆盖,我们把这一过程叫做方法的重写(override)

2 为什么要使用方法重写

2.1 当父类的方法满足不了子类的需求的时候,需要在子类中对该方法进行重写

2.2 题目与分析

例如存在一个父类Peple,子类Chinese,父类中有一个say()方法,输出人在说话,但是我想要的时子类时候调用时输出中国人在说话,很显然直接调用方法不行,所以需要在子类中对say方法进行方法的重写

2.3 示例代码

People类

public class Peple {private String name;private String sex;private int age;private int weight;public Peple() {}public Peple(String name, String sex, int age, int weight) {this.name = name;this.sex = sex;this.age = age;this.weight=weight;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public int getWeight() {return weight;}public void setWeight(int weight) {this.weight = weight;}public void say(){System.out.println("人在说话");}}

Chinese类

public class Chinese extends Peple{public Chinese() {}@Overridepublic void say() {System.out.println("中国人在说话");}
}

Test03类

public class Test03 {public static void main(String[] args) {Chinese c=new Chinese();c.say();//当进行方法重写时,调用的是子类的say()方法}
}

2.4 示例代码运行截图

3 如何使用方法重写

3.1 基本语法

@Override
权限修饰符 返回值类型 方法名(形参列表){//子类重写的方法的权限修饰符的访问权限必须大于等于父类的,但是父类不能是private//当父类的返回值类型为基本数据类型或者为void时,子类方法的返回值类型也应该为对应的基本数据类型或者void}

3.2 具体分析

3.2.1 子类重写的方法的访问权限应该大于等于父类方法的访问权限

a 示例代码
People类
public class Peple {private String name;private String sex;private int age;private int weight;public Peple() {}public Peple(String name, String sex, int age, int weight) {this.name = name;this.sex = sex;this.age = age;this.weight=weight;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public int getWeight() {return weight;}public void setWeight(int weight) {this.weight = weight;}//没有写访问权限的话,默认是default访问权限void say(){System.out.println("人在说话");}}
Chinese类
public class Chinese extends Peple{public Chinese(){}//父类say方法的访问权限为default,子类say方法的访问权限为public,// 符合子类方法访问权限大于等于父类方法访问权限的要求@Overridepublic void say() {System.out.println("中国人在说话");}
}
Test03类
public class Test03 {public static void main(String[] args) {Chinese c=new Chinese();c.say();}
}
b 示例代码运行截图

3.2.2 当父类方法的返回值类型为基本数据类型时,子类重写的方法的返回值类型也为对应的基本数据类型

a 示例代码
People类
public class Peple {private String name;private String sex;private int age;private int weight;public Peple() {}public Peple(String name, String sex, int age, int weight) {this.name = name;this.sex = sex;this.age = age;this.weight=weight;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public int getWeight() {return weight;}public void setWeight(int weight) {this.weight = weight;}public double add(int a,int b){return a+b;}}
Chinese类
public class Chinese extends Peple{public Chinese(){}@Overridepublic double add(int a,int b) {return a+b+1;}
}
Test03类
public class Test03 {public static void main(String[] args) {Chinese c=new Chinese();System.out.println("求和之和再加上1的结果为: "+c.add(2, 3));}
}
b 示例代码运行截图

3.2.3 当父类方法的返回值类型为void时,子类重写的方法的返回值类型也为void

a 示例代码
People类
public class Peple {private String name;private String sex;private int age;private int weight;public Peple() {}public Peple(String name, String sex, int age, int weight) {this.name = name;this.sex = sex;this.age = age;this.weight=weight;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public int getWeight() {return weight;}public void setWeight(int weight) {this.weight = weight;}public void eat(){System.out.println("人的主食一般是熟食");}}
Chinese类
public class Chinese extends Peple{public Chinese(){}@Overridepublic void eat() {System.out.println("中国人的主食是大米或者小麦");}
}
Test03类
public class Test03 {public static void main(String[] args) {Chinese c=new Chinese();c.eat();}
}
b 示例代码运行截图

3.2.4 当父类的方法被static修饰的时候,子类是不能重写该方法的

a 错误示例代码
People类
public class Peple {private String name;private String sex;private int age;private int weight;public Peple() {}public Peple(String name, String sex, int age, int weight) {this.name = name;this.sex = sex;this.age = age;this.weight=weight;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public int getWeight() {return weight;}public void setWeight(int weight) {this.weight = weight;}public static void eat(){System.out.println("人的主食一般是熟食");}}
Chinese类
public class Chinese extends Peple{public Chinese(){}@Overridepublic void eat() {System.out.println("中国人的主食是大米或者小麦");}
}
Test03类
public class Test03 {public static void main(String[] args) {Chinese c=new Chinese();c.eat();}
}
b 示例代码运行截图
编译时idea给出的错误提示

强制运行后给出的错误提示

3.3 方法重写的一些小技巧

3.3.1 复制法

步骤

1.先直接复制(Ctrl+C)父类中需要被子类重写的那个方法

2.粘贴(Ctrl+V)到子类中

3.修改子类中的功能,便于实现父类实现不了的需求

操作截图展示


3.3.2 编译器提示法

步骤

1.先在子类类体中,非方法内位置,写入一个英文@符号

2.选中提示中的Overide/implement methods…

3.双击后弹出一个重写方法选择列表弹窗

4.根据提示选中对应的需要重写的方法

5.点击ok按钮后会在子类中生成一个你选中方法的重写方法

6.把生成的重写方法中的自动生成的首行去掉,然后根据需求在方法体里面写入合适的语句

操作截图展示



3.3.3 快捷键法

步骤

1.把鼠标移动到重写方法应该生成的位置

2.同时按下键盘上的Alt键Insert键,

3.在弹出框中,选中Override Methods

4.双击后会弹出一个界面,在界面中选中需要被子类重写的方法

5.点击OK按钮后会生成所需要的重写方法

6.去掉重写方法中自动生成的首行,然在其方法体里面写入合适的语句

操作截图展示




解析java中的方法重写相关推荐

  1. JAVA 中toSting() 方法重写

    一.Object类介绍 Object类在JAVA里面是一个比较特殊的类,JAVA只支持单继承,子类只能从一个父类来继承,如果父类又是从另外一个父类继承过来,那他也只能有一个父类,父类再有父类,那也只能 ...

  2. Java中equals()方法重写

    Java中的equals()方法是在Object类中定义,Object类是所有类的父类.换句话说,任何类都隐含地继承了该方法.判断两个对象的内容是否相同,必须使用equals()方法,对于没有重写该方 ...

  3. Java中父类方法重写有哪些需要注意的?

    在继承关系中,子类会自动继承父类中公共的方法,但有时在子类中需要对继承的方法进行一些修改,即对父类的方法进行重写.需要注意的是,子类中重写的方法需要和父类被重写的方法具有相同的方法名.参数列表以及返回 ...

  4. java中的方法重写

    1 方法重写 1.1什么是方法重写 子类中出现了和父类中一模一样的方法声明(方法名,参数列表,返回值类型),也被称为方法覆盖,方法复写. Override和Overload的区别?Overload能改 ...

  5. java中equals方法重写详解(彻底搞定)

    首先上案例: public static void main(String[] args){String str1 = "abc";String str2 = "abc& ...

  6. 解析java中方法的重载和重写之间的区别与联系

    解析java中方法的重载和重写之间的区别与联系 1 不同点 1.1 方法重写是在不同的类中(父子类),方法重载是在同一类中 1.2 方法重载最初的目的是构造方法的多样化,方法重写的目的是让重写的方法满 ...

  7. 解析java中的abstract关键字

    解析java中的abstract关键字 1 含义 abstract:抽象的;是java中用来修饰类和方法一个关键字 2 为什么要用 2.1 当我们不想类能够实例化时(类实例化没有意义,例如Animal ...

  8. java 返回值判断_在Java中判断方法重载的条件除了参数外,还可以通过返回值类型判断。_学小易找答案...

    [单选题]若int x;且有下面的程序片断,则输出结果是() . for (x=3; x<6; x++) { printf((x%2) ? "##%d" : "** ...

  9. java 获取spring对象数组_解析Java中如何获取Spring中配置的bean

    解析Java中如何获取Spring中配置的bean Java中如何获取Spring中配置的bean?下面是由百分网小编为大家整理的解析Java中如何获取Spring中配置的bean,喜欢的可以收藏一下 ...

最新文章

  1. Udacity机器人软件工程师课程笔记(三十二) - 卡尔曼滤波器 - 一维卡尔曼滤波器 - 多维卡尔曼滤波器 - 拓展卡尔曼滤波器(EKF)
  2. Linux服务器日志备份到本地
  3. 无法挂载 NTFS格式的分区:mount: unknown filesystem type ‘ntfs’
  4. 我的公众号 - Old Artist
  5. 推荐系统阅读清单:最近我们在读哪些论文?
  6. 软件技术专业-就业提示(三、Java工程师必备技能)
  7. ES6语法---const和symbol
  8. mysql concat 变量_MySQL 字符串连接CONCAT()函数
  9. QT编译错误:invalid application of 'sizeof' to incomplete type 'Qt3DRender::QPickEvent'
  10. 用户输入和命令行参数
  11. 初学者也能看懂的隐马尔科夫模型介绍
  12. python进阶-argparse
  13. Nodejs修改镜像以及缓存路径
  14. ## 纯干货|UI设计字体分类、使用标准及测量内容
  15. 台式计算机硬盘能扩大吗,电脑怎么增加磁盘内存
  16. 背包问题-三种动态规划解法-逐步减少空间复杂度
  17. 计算智能——粒子群优化算法实验
  18. ubuntu 安装小企鹅拼音输入法
  19. lt;#37;= %、lt;#37; %、lt;#37;@ %、lt;#37;:%和lt;#37;# %的区别
  20. 从《雪白血红》说起(1)

热门文章

  1. Linux常用操作命令大全
  2. png怎么批量转换成jpg格式?
  3. Nginx 优化实战
  4. Controller与RestFul风格
  5. 一文让你搞懂设计模式
  6. switch用法java
  7. 解决vue-router在3.0版本以上重复点菜单报错问题
  8. IDEA 常用插件及阿里注释和格式化模板
  9. 用python的opencv库在图片上画出蓝底黑字的文本框
  10. 手把手教你进行安全帽的佩戴检测(附数据集+代码演示+实验结果)