一、什么是继承
继承是面向对象语法的三大特征之一。继承可以降低代码编写的冗余度,提高编程的效率。通过继承,子类获得了父类的成员变量和方法。
继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。简单来说,继承就是一个类A继承了另一个类B的所有成员,并且能够访问使用那些非私有成员。
二、继承的作用
当多个类中存在相同属性和行为时,我们可以将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那一个类即可。因此继承的一个很重要的意义就是能够减少代码的冗余。
所以,继承的作用就是通过继承可以快速创建新的类,实现代码的重用,提高程序的可维护性,节省大量创建新类的时间,提高开发效率和开发质量。
三、继承的语法
class 父类{
... //成员变量、成员方法
}
class 子类 extends 父类{
... //类体
}
四、实例
现有三个类
学生类 属性:姓名,年龄 行为:吃饭,睡觉
老师类 属性:姓名,年龄,薪水 行为:吃饭,睡觉,教书
班主任 属性:姓名,年龄,薪水 行为:吃饭,睡觉,管理
从这三个类中我们能抽离出三个类中相同的属性和行为,那么我们就可以为这三个类设置一个父类具有其共同的属性和行为,是这三个类从中继承,避免代码的重复性。
父类
public class Human {
String name;
int age;
public void eat(){
System.out.println("吃饭");
}
public void sleep(){
System.out.println("睡觉");
}
}
子类
public class Teacher extends Human {
double salary;
public void teaching(){
System.out.println("上课");
}
}
我们可以在测试类中定义子类的对象,通过子类的对象来调用父类中的属性和方法
五、方法的重写
父类继承下来的方法不满足子类需要的时候,可以写一个和父类声明一样的方法,方法体中逻辑重新实现,这个子类重新定义的方法就是重写后的方法。重写后的方法会覆盖父类的功能,因此成为方法重写,方法的覆盖。
注意:在进行方法的重写的时候,我们要声明一个一样的方法,对其中的逻辑体进行重写。
声明一个一样的方法即是说:方法名和形参列表都不能改变,这与方法的重载不同
eg:方法的重载是在同一个类中存在着同名但形参列表不同的方法。
声明:修饰符 返回值类型 方法名 (参数列表) {
方法体;
}
!!!注意!!!
在进行方法的重写的过程中,我们要保证子类重写的父类的方法,其子类的权限必须大于等于父类的权限。
也就是说当父类的方法是被public所修饰时,子类的方法也必须是用public修饰。
当父类的方法是用priva修饰时,那子类的方法可以用public或者priva修饰。
六、super关键字
super关键字的作用与this关键字作用类似,this关键字用来区分全局变量和局部变量,而super关键字则用来区分子类和父类中同名的变量
class A{
int num1 = 100;
int num3 = 300;//父类的成员变量
private int num4;
public int getNum4() {
return num4;
}
public void setNum4(int num4) {
this.num4 = num4;
}
}
class B extends A{
int num2 = 200;
int num3 = 400; //本类成员变量
public void show() {
int num3 = 500;//局部变量
System.out.println(num3);//500 //局部变量
System.out.println(this.num3);//400 本类的成员变量
System.out.println(super.num3);//300 super:专门用于访问父类空间的关键字
}
}