1 package com.bytezero.override; 2 /* 3 * 方法的重新(override/overwrite) 4 * 5 * 1.重写:子类继承父类以后,可以对父类中同名同参数的方法,进行覆盖操作 6 * 7 * 2.重写以后,创建子类对象以后,通过子类对象调用父类中的同名同参数的方法时, 8 * 实际执行的是子类重写父类的方法 9 * 10 * 3.重写的规定: 11 * 方法的声明:权限修饰符 返回值类型 方法名 thiows(异常的类型)(形参列表) 12 * { 13 * //方法体 14 * } 15 * 16 * 子类中的叫重写的方法 17 * 父类中的叫被重写的方法 18 * (1)子类重写的方法的方法名和形参列表与父类被重写的方法名和形参列表相同 19 * (2)子类重写的方法的权限修饰符 不小于 父类被重写的方法权限修饰符(也可以相等) 20 * >特殊情况:子类不能重写父类中声明为 private 权限的方法 21 * 22 * (3)返回值类型 23 * 父类被重写的方法的返回值类型是 void,则子类重写的方法的返回值类型 只能是 void 24 * 父类被重写的方法的返回值类型是 A 类型,则子类重写的方法的返回值类型可以是A类, 25 * 或A类的子类 26 * 父类被重写的方法的返回值类型是 基本数据类型(double),则子类重写的方法的返回值类型必须 27 * 是相同的基本数据类型(double) 28 * 29 * 异常方面:子类重写的方法抛出异常类型(Runtime) 不大于 父类被重写的方法抛出异常类型(Exception) 30 * 31 * ************************************************************************************************ 32 * 子类和父类中的同名同参的方法 要么都声明为非static的(考虑重写),要么都声明为 static的(不是重写) 33 * static不能被重写 . 34 * 35 * 36 37 * 面试题:区分方法的重载与重写 38 * 39 * 40 * 41 * 42 * 43 * 44 * 45 * 46 */ 47 48 49 50 public class PersonTest 51 { 52 public static void main(String[] args) 53 { 54 Student s = new Student("计算机科学与技术"); 55 56 s.eat(); //重写以后调用自己的 57 s.walk(100); //父类的 58 59 System.out.println("*************************"); 60 61 // s.major ="语文"; //自己的 62 s.study(); 63 64 Person p1 = new Person(); 65 p1.eat(); //调用自己的eat() 方法 66 } 67 }
1 package com.bytezero.override; 2 3 public class Person 4 { 5 String name; 6 int age; 7 8 public Person() 9 { 10 11 } 12 13 public Person(String name,int age) 14 { 15 this.name = name; 16 this.age = age; 17 } 18 19 public void eat() 20 { 21 System.out.println("吃饭"); 22 } 23 public void walk(int distance) 24 { 25 System.out.println("走路,走的距离是啊"+distance+"公里"); 26 show(); 27 eat(); 28 } 29 30 private void show() 31 { 32 System.out.println("这是一个私有的方法"); 33 } 34 35 public Object info() 36 { 37 return null; 38 } 39 40 public double info1() 41 { 42 return 1.0; 43 } 44 45 46 }
1 package com.bytezero.override; 2 3 public class Student extends Person 4 { 5 6 String major; 7 8 public Student() 9 { 10 11 } 12 13 public Student(String major) 14 { 15 this.major = major; 16 } 17 18 public void study() 19 { 20 System.out.println("学习,专业是:"+major); 21 } 22 23 //重写了父类中的 eat方法 24 public void eat() 25 { 26 System.out.println("学生应该多吃有营养的食物"); 27 } 28 29 public void show() //不认为是重写了,因为父类是 私有 private 权限 30 { 31 System.out.println("这是一个私有的方法,这个方法在student重写了。"); 32 } 33 34 public String info() 35 { 36 return null; 37 } 38 39 // public int info1() 40 // { 41 // return 1; 42 // } 43 44 45 46 }