面向对象(方法重写与关键字final)
一.方法重写
(1).什么是方法重写(override)?
方法重写:子类中出现了和父类一模一样的方法声明(方法名,参数列表,返回值类型),也称其为方法覆盖,方法复写。
(2).区分方法重写和方法重载
方法重载(overload):在同一个类中,允许出现多个方法名相同的方法,在调用方法时,系统会根据数据的类型和个数自动分配。
(3).方法重写的应用
当子类需要父类的功能,而功能主体子类有自己特有的内容时(子类不满意父类的方法时),可以进行重写父类中的方法。
(4).方法重写中的注意事项
a.父类中的私有方法因为不能被继承,所以也不能进行重写;
b.子类重写父类方法时,访问权限不能更低,最好就一致;
c.父类静态方法,子类也必须通过静态方法进行重写。注意,重写静态方法不能称其为方法重写。
d.按下CTRL+O系统会自动进行方法重写。
(5).例题:
package hcn7;
public class MyText {
public static void main(String[] args) {
Student student = new Student();
student.name=“张三”;
student.age=13;
student.sleep();
student.eat();
student.palyGame();
System.out.println("-----------------");
Teacher teacher = new Teacher();
teacher.name=“在西安”;
teacher.age=19;
System.out.println(teacher.name);
teacher.eat();
teacher.sleep();
teacher.sing();
}
}
package hcn7;
public class Person {
public String name;
public int age;
public void eat(){
System.out.println(“吃饭”);
}
public void sleep(){
System.out.println(“睡觉”);
}
}
package hcn7;
public class Teacher extends Person{
@Override
public void eat() {
System.out.println(“老师爱吃油泼面”);
}
@Override
public void sleep() {
System.out.println(“我喜欢晚上搂着老婆睡觉”);
}
public void sing() {
System.out.println(“唱歌”);
}
}
package hcn7;
public class Student extends Person{
public void palyGame(){
System.out.println(“玩游戏”);
}
//Ctrl+O 重写父类的方法
@Override
public void eat() {
System.out.println(“学生爱吃麻辣烫”);
}
@Override
public void sleep() {
super.sleep();
System.out.println(“我不仅睡觉,还要打呼噜”);
}
}
其输出为:二.关键字 final
(1)为什么会有final?
如果我们不想让子类去重写父类的方法或者不想让一个类被继承,就用final去修饰那个方法或那个类。
(2)final概述
关键字final是“最终”的意思,可以修饰类,变量,成员方法。
(3).final的特点
a.final修饰类,此类不能被继承;
final修饰方法,此方法不能被重写;
final修饰变量,这个变量不能被赋值。