方法的重写

简介: 方法的重写

方法的重写(override/overwrite)

2.应用:重写以后,当创建子类对象以后,通过子类对象调用父类中的同名同参的方法时,实际执行的是子类重写父类的方法。

3.重写的规定:

方法的声明:权限修饰符 返回值类型 方法名(形参列表)throws 异常的类型{

//方法体

}

约定俗称:子类中的叫重写方法;父类中的叫被重写的方法

1.子类重写的方法的方法名和形参列表与父类中的被重写的方法的方法名和形参列表相同

2.子类重写的方法的权限修饰符不小于父类中的被重写的方法的权限修饰符

特殊情况:子类不能重写父类中private的方法>

3.返回值类型:
3.1父类被重写的方法的返回值类型是void,则子类重写的方法的返回值类型只能是void

3.2 父类被重写的方法的返回值类型是A类型,则子类重写的方法的返回值类型是A类或A类的子类

3.3 父类被重写的方法的返回值类型是基本数据类型(比如:double),则子类重写的方法的返回值类型必须是相同的基本数据类型

4.子类重写的方法抛出的异常类型不大于父类被重写的方法的异常类型(具体放到异常处理时候讲)

子类和父类中同名同参的方法要么都声明为非static的(考虑重写),要么都声明为static的(不能被重写)

面试题:区分方法的重载和重写

在B站学习java写的代码

代码如下

/*
 * 方法的重写(override/overwrite)
 * 
 * 1.重写:子类继承父类以后,可以对父类中同名同参的方法,进行覆盖操作
 * 
 * 2.应用:重写以后,当创建子类对象以后,通过子类对象调用父类中的同名同参的方法时,实际执行的是子类重写父类的方法。
 * 
 * 3.重写的规定:
 *      方法的声明:权限修饰符  返回值类型 方法名(形参列表)throws 异常的类型{
 *                //方法体
 *            }
 *      约定俗称:子类中的叫重写方法;父类中的叫被重写的方法
 *    1.子类重写的方法的方法名和形参列表与父类中的被重写的方法的方法名和形参列表相同
 *    2.子类重写的方法的权限修饰符不小于父类中的被重写的方法的权限修饰符 
 *      >特殊情况:子类不能重写父类中private的方法
 *    3.返回值类型:
 *      >父类被重写的方法的返回值类型是void,则子类重写的方法的返回值类型只能是void
 *      >父类被重写的方法的返回值类型是A类型,则子类重写的方法的返回值类型是A类或A类的子类
 *      >父类被重写的方法的返回值类型是基本数据类型(比如:double),则子类重写的方法的返回值类型必须是相同的基本数据类型
 *    4.子类重写的方法抛出的异常类型不大于父类被重写的方法的异常类型(具体放到异常处理时候讲)
 *    ***********************************************************
 *    子类和父类中同名同参的方法要么都声明为非static的(考虑重写),要么都声明为static的(不能被重写)
 * 面试题:区分方法的重载和重写
 * 
 * 
 * 
 */

PersonTest类

package com.day0123_2;
public class PersonTest {
  public static void main(String[] args) {
    Student s=new Student("计科");
    s.eat();
    s.walk(10);
    System.out.println("*********");
    s.study();
    Person p1=new Person();
    p1.eat();
  }
}

Person类

package com.day0123_2;
public class Person {
  String name;
  int age;
  public Person() {
  }
  public Person(String name,int age) {
    this.name=name;
    this.age=age;
  }
  public void eat() {
    System.out.println("吃饭");
  }
  public void walk(int distance) {
    System.out.println("走了"+distance+"米长的路");
    show();
    eat();
  }
  private void show() {
    System.out.println("我是一个人");
  }
  public Object info() {
    return null;
  }
  public double info1() {
    return 1.0;
  }
}

Student类

package com.day0123_2;
public class Student extends Person{
  String major;
  public Student() {
  }
  public Student(String major) {
    this.major=major;
  }
  public void study() {
    System.out.println("学习"+major+"专业");
  }
  //  对父类eat方法重写
  public void eat() {
    System.out.println("学生应该多吃有营养的食物");
  }
  public void show() {
    System.out.println("我是一个学生");
  }
  public String info() {
    return null;
  }
//  public int info1() {
//    return 1;
//  }
  //ALT +/
  public void walk(int distance) {
    System.out.println("重写的方法");
  }
}
相关文章
|
1月前
|
Java 编译器
重载和重写的区别是什么?
重载和重写的区别是什么?
|
1月前
重载和重写的区别
重载和重写的区别
12 0
|
9月前
重载和重写有什么区别?
重载和重写有什么区别?
46 0
|
9月前
|
C#
|
10月前
类的继承和重写方法
类的继承和重写方法
50 0
什么是重载、重写,重载和重写的区别是什么?
什么是重载、重写,重载和重写的区别是什么?
87 2
什么是重载、重写,重载和重写的区别是什么?
|
Java 编译器
重载与重写有什么区别?
重载与重写有什么区别?
|
开发者 Python
子类重写父类方法|学习笔记
快速学习子类重写父类方法,先来介绍子类重写父类方法。多态其实就是一种子类重写父类的方法。
145 0
|
开发者 Python
方法的重写|学习笔记
快速学习 方法的重写