标签:
方法的覆盖(Override)的条件:
? 必须要有继承关系
? 覆盖只能出现在子类中,如果没有继承关系,不存在覆盖,只存在重载
? 在子类中被覆盖的方法, 必须和父类中的方法完全一样, 也就是方法名, 返回类型、参数列表,完全一样
? 子类方法的访问权限不能小于父类方法的访问权限
? 子类方法不能抛出比父类方法更多的异常,但可以抛出父类方法异常的子异常
? 父类的静态方法不能被子类覆盖
? 父类的私有方法不能覆盖
? 覆盖是针对成员方法,而非属性
为什么需要覆盖?
就是要改变父类的行为
方法覆盖 两种形式:
对成员方法覆盖
对静态方法覆盖
/* 关于方法的覆盖: 1. 什么时候方法需要进行重写? 如果父类中的方法已经无法满足 当前子类的业务需求,需要将父类中的方法重写一遍 2. 子类如果重写父类的方法之后,子类的对象一定要调用 重写之后的方法 3. 发生方法的覆盖的条件: 第一:发生在具有继承关系的两个类之间 第二:必须具有相同的方法名,相同的返回值类型,相同的参数列表 第三:重写的方法不能比被重写得方法拥有更底的访问权限; 第四:重写的方法不能比被重写的方法抛出的更宽泛的异常(异常机制) 第五:私有方法是不能被覆盖(多态) 第六:构造方法无法被覆盖,因为构造方法无法被继承的 第七:静态的方法不存在覆盖(多态) 第八:覆盖指的是成员方法,和成员变量无关。 4. 继承最基本的作用: 代用重用 继承最重要的作用:方法可以重写 new谁就调谁 */ //对成员方法覆盖 public class Test01{ public static void main(String[] args){ // 创建子类对象 Cat c = new Cat(); // 调用方法 c.move(); Animal a = new Animal(); a.move(); } } // 父类:动物 class Animal{ // 成员方法 public void move(){ System.out.println("小动物在移动 !"); } } // 子类:猫 class Cat extends Animal{ // Cat的move方法 应该输出:小猫走起,还跳起来了! // Animal中的move方法 已经无法满足Cat了 // 所以在Cat类中对Animal类中的move方法进行 重新定义(就是方法的覆盖,方法的重写 Overwrite,Override) public void move(){ System.out.println("小猫走起,还跳起来了!"); }
//输出为:小猫走起,还跳起来了!
// 小动物在移动 !
}
/* 对静态方法的覆盖 1. 声明的是哪一个类就调用的是哪一个类的静态方法和子类 是没有关系的 */ public class OverrideStaticTest01{ public static void main(String[] args){ Person person_student = new Student(); person_student.setName("ming"); person_student.setSex(true); person_student.setAge(18); print(person_student); } private static void print(Person p){ p.printInfo(); } } class Person{ // 姓名 private String name; // 性别 private boolean sex; // 年龄 private int age; // 静态方法 public static void printInfo(){ System.out.println("---------Person---------"); } public void setName(String name){ this.name = name; } public String getName(){ return name; } public void setSex(boolean sex){ this.sex = sex; } public boolean getSex(){ return sex; } public void setAge(int age){ this.age = age; } public int getAge(){ return age; } } class Student extends Person{ // 学号 private int id; // 班级编号 private int classId; // 静态方法 public static void printInfo(){ System.out.println("---------Student---------"); } public void setId(int id){ this.id = id; } public int getId(){ return id; } //输出为:--------Person---------
}
标签:
原文地址:http://www.cnblogs.com/Deng1185246160/p/4229677.html