什么是方法重写(overriding)?
- 子类根据需求从父类继承的方法进行重新编写
- 重写是,可以使用super.方法的方式来保留父亲的方法
- 构造方法不能被重写
public class Animal { private String name; private int age; public void setName(String name) { this.name = name; } public String getName() { return name; } public void setAge(int age) { this.age = age; } public int getAge() { return age; } public void print(String name, int age) { this.name = name; this.age = age; } }
Cat继承Animal,拥有自己的特有属性voice
public class Cat extends Animal{ private String voice; public void setVoice(String voice) { this.voice = voice; } public String getVoice() { return voice; } public Cat(String voice) { this.voice = voice; } public void print(String name, int age) { super.print(name, age);//使用super.print保留父类的方法 System.out.println("宠物的名字是:"+getName()+"年龄:"+getAge()+"岁 我会"+getVoice()); } }
Dog继承Animal,同时有自己的特有属性:Strain
public class Dog extends Animal{ private String strain; public void setStrain(String strain) { this.strain = strain; } public String getStrain() { return strain; } public Dog(String strain) { this.strain = strain; } public void print(String name, int age) { super.print("阿黄",7); this.strain = "哈士奇"; System.out.println("宠物的名字是:"+name+"年龄:"+age+"岁 品种是:"+getStrain()); } }
最后输出的结果就是一开始的图
方法重写的规则
- 方法名相同
- 参数列表相同(数量,顺序,数据类型)
- 如果有返回值,返回值相同或者是其子类
- 访问权限不能严于父类
- 父类的静态方法不能被重写为非静态方法,反之父类的非静态方法不能被重写为静态方法
- 子类可以定义与父类同名的静态方法,以便在子类中隐藏父类的静态方法(静态方法中无法使用super、this)
- 父类的私有方法不能被子类重写(private修饰的)
- 不能抛出比父类更多的异常(这是啥?学了异常你就知道了)
PS:静态方法中不能使用super、this关键字,this指向本类中已存在的对象,super是对父类对象的引用,指向父类对象,而静态方法是优先于对象的,所以在静态方法中使用super、this时,由于指向的对象晚于静态方法出现,所以指向的是啥也没有
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/211632.html原文链接:https://javaforall.net
