概述:
1.什么是继承
2.继承的好处
3.继承的格式
4.继承案例
5.继承后成员变量重名
6.继承后成员方法重名
7.方法重写
系统开发可以去找吴燕: [#156-22微27-78电87#]
1.继承的含义
总结:就是子类继承父类的属性和行为,使得子类对象可以直接具有与父类相同的属性、相同的行为。子类可以直接访问父类中的非私有的属性和行为。
1.提高代码的复用性(相同的代码不需要重复的写,只需要提取到父类中,子类可以直接使用) 2.让类和类之间产生了关系 3.继承的格式
class 父类 {...} class 子类 extends 父类 {...} // Java是单继承的。一个类智能继承一个类(一个人只有一个亲生父母)
1.学生类 属性:姓名、年龄、学习、吃饭、睡觉; 2.老师类 属性:姓名、年龄、教书、吃饭、睡觉; 3.班主任类 属性:姓名、年龄、管理、吃饭、睡觉;
4.1代码实现
共同拥有的属性抽取到父类,子类只需要继承父类就可以得到这些属性、方法,子类只需要写子类特有的方法即可。
// 定义父类 public class Human { private String name; private int age; public void eat(){ System.out.println("我是父类的吃方法"); } public void sleep(){ System.out.println("我是父类的睡觉方法"); } } // 省略get、set、构造方法 // 定义学生类 public class Student extends Human { public void study(){ System.out.println("我是学生类的上课方法"); } // 定义老师类 public class Teacher extends Human { public void teach(){ System.out.println("我是老师类的上课方法"); } } } // 定义班主任类 public class ClassTeach extends Human{ public void manage(){ System.out.println("我是班主任类的管理方法"); } } // 定义测试类 public static void main(String[] args) { Teacher teacher = new Teacher(); teacher.eat(); teacher.sleep(); teacher.teach(); teacher.setAge(21); teacher.setName("小明"); System.out.println(teacher); } }
得到结果:
注意:子类不能继承父类的构造器,因为子类有自己的构造器。 但是子类可以继承父类的私有成员(成员变量,方法),只是子类无法直接访问而已,可以通过getter/setter方法访问父类的private成员变量。
5.继承后成员变量重名
思考1: 子类继承父类出现重名的成员变量时会有变化吗?
子类继承父类后,出现重名的成员变量,子类会优先访问自己的,自己没有才去访问父类的
思考2: 子类如何访问父类的成员变量?
super:代表的是父类对象的引用, this:代表的是当前对象的引用。 注意:子类构造器的第一行都隐含了一个super()去调用父类 无参数构造器,super()可以省略不写。 格式:super.父类成员变量名(super后面可是有点的哦)
6.继承后成员方法重名
思考: 子类继承父类出现成员方法重名会有变化吗?
子类、父类中出现重名的成员方法,子类对象会优先调用自己的方法。
子类中出现与父类一模一样的方法时(返回值类型,方法名和参数列表都相同),会出现覆盖效果,也称为重写或者复写。声明不变,重新实现。
7.1@Override重写注解
-@Override:注解,重写注解校验!
这是注解标记的方法,就说明这个方法必须是重写父类的方法,否则编译阶段报错。
建议重写都加上这个注解,一方面可以提高代码的可读性,一方面可以防止重写出错!
代码演示:
public class Student extends Human { @Override public void sleep(){ System.out.println("我是重写方法"); } }