重写
方法的重写
使用:当父类中的方法不能满足子类的需要,方法的重写又称方法的覆盖,一般用于子类根据需要可以对父类中的方法进行重新编写
重写的前提是:必须在继承体系下,也就是必须存在继承关系
重载的前提是:同一个类中
重写和重载有什么关系?
完全不一样,没有任何关系。
方法重写的原则
1.方法名必须相同
2.参数列表必须相同
3.返回值类型相同或者是其子类
4.访问权限相同或不能严于父类
注意:
1.一般不会去改变返回值和访问权限
2.父类的私有方法不能被重写,重写的是可以被继承的方法
3.一般情况下,重写都是会存在一模一样的方法仅仅是方法体不一样。
4.只能重写继承来的方法
方法重写和重载的区别
重载:同类同名不同参,与其他无关(同一个类中,方法名,参数列表不同–个数不同,类型不同,顺序不同)
重写:在子类和父类中存在,同名同参同返回值同访问修饰符的方法(返回值可以是其子类,访问修饰符不能比父类更严格)
final关键字:最终的,最后的
修饰变量:表示常量,不能改变的值
修饰方法:表示最终方法,不能被重写的方法
修饰类:这个类不能被继承了,最后的一个版本,断子绝孙类
测试
package animal_1;
public class Demo {
public static void main(String[] args) {
// 测试
Cat cat = new Cat();
// Cat:喜欢吃鱼
cat.eat();
}
}
父级
package animal_1;
public class Pet {
// 父类
private String name;
private String sex;
private int age;
// 父类的方法
public void eat(){
System.out.println("Pet:喜欢吃炸鸡");
}
// 取值和赋值
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Pet [name=" + name + ", sex=" + sex + ", age=" + age + "]";
}
public Pet() {
super();
// TODO Auto-generated constructor stub
}
public Pet(String name, String sex, int age) {
super();
this.name = name;
this.sex = sex;
this.age = age;
}
}
子级
package animal_1;
public class Cat extends Pet {
public void eat(){
System.out.println("Cat:喜欢吃鱼");
}
// 方法的重写
// 当父类的方法不能满足子类的需求使用
// 方法的重写如何使用:
// 1.在父类中定义一个被继承的方法
// 2.创建子类对象,通过对象调用父类的方法
// 3.在子类中对父类的方法进行重写,又叫覆盖
// 方法重写的原则
// 1、方法名必须相同
// 2、参数列表必须相同
// 3、返回值类型相同或者是其子类
// 4、访问权限相同或不能严于父类
}