在子类中可以根据需要对从父类中继承来的方法进行改造,也称为方法的重置、覆盖。在程序执行时,子类的方法将覆盖父类的方法。
子类与父类中同名同参数的方法必须同时声明为非 static 的(即为重写),或者同时声明为 static 的(不是重写)。因为 static方法是属于类的,子类无法覆盖父类的方法。
Person.java
package com.klvchen.java1; 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; } }
Student.java
package com.klvchen.java1; 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("学生应该多吃有营养的食物"); } //无法对父类中的 eat() 进行了重写 public void show() { System.out.println("我是一个学生"); } public String info() { return null; } public void walk(int distance) { System.out.println("重写的方法"); } }
PersonTest.java
package com.klvchen.java1; 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(); } }
运行结果: