目标:
1,认识继承
Java中提供了一个关键字extends,用这个关键字,可以让一个类和另一个类建立起父子关系。
继承的特点:
子类可以继承父类的非私有成员(成员变量,成员方法);
继承后子类的对象是由子类和父类共同完成的。
2,继承的好处
使用继承可以减少重复代码的编写
减少重复代码的编写
3.继承的相关注意事项
-
.权限修饰符
权限修饰符用来限制类中的(成员变量,成员方法,构造器,代码块。。。)能够访问的范围。
权限修饰符有四种:
- private :只能在本类访问
- 缺省:本类或同一个包中的类
- protected:本类或同一个包中的类、子孙类中
- public:任意位置
-
单继承、Object类
Java中的类是单继承的,但是可以多层继承
为什么Java中不能多继承
object类是java所有类的祖宗类。我们写的任何一个类,其实都是object的子类或子孙类。
-
方法重写
在继承的条件下,当子类觉得父类的方法不能满足自己,子类可以重写一个方法名相同,参数相同的方法,去覆盖父类的方法,这就叫方法的重写。
方法重写后,方法的访问会根据就近原则
方法重写的其它注意事项
重写小技巧:使用Override注解,他可以指定java编译器,检查我们方法重写的格式是否正确,代码可读性也会更好。
子类重写父类方法时,访问权限必须大于或者等于父类该方法的权限( public > protected > 缺省 )。
重写的方法返回值类型,必须与被重写方法的返回值类型一样,或者范围更小。
私有方法、静态方法不能被重写,如果重写会报错的。
-
子类中访问其他成员变量的特点
1、在子类方法中访问其他成员(成员变量、成员方法),是依照就近原则的。
先子类局部范围找。 然后子类成员范围找。 然后父类成员范围找,如果父类范围还没有找到则报错。
2、如果子父类中,出现了重名的成员,会优先使用子类的,如果此时一定要在子类中使用父类的怎么办? 可以通过super关键字,指定访问父类的成员:super.父类成员变量/父类成员方法
-
子类构造器的特点
子类构造器的特点: 子类的全部构造器,都会先调用父类的构造器,再执行自己。
子类构造器是如何实现调用父类构造器的:
默认情况下,子类全部构造器的第一行代码都是 super() (写不写都有) ,它会调用父类的无参数构造器。 如果父类没有无参数构造器,则我们必须在子类构造器的第一行手写super(….),指定去调用父类的有参数构造器。
子类构造器为什么一定要先调用父类的构造器:
因为在继承中子类对象是由子父类共同创建的,调用子类构造器,给子类成员变量初始化时,子类构造器肯定先调用父类构造器给父类的成员变量进行初始化。
注意:如果父类没有空参构造,子类的构造器第一行必须写super(....),否则会报错。
-
注意事项
1.子类构造器有啥特点?
子类中的全部构造器,都必须先调用父类的构造器,再执行自己。
2、super(…)调用父类有参数构造器的常见应用场景是什么?
为对象中包含父类这部分的成员变量进行赋值。
3、this(…)的作用是什么?
在构造器中调用本类的其他构造器。
3、this(…)和super(…)的使用需要注意什么?
都必须放在构造器的第一行且不能同时出现。
补充知识:this(…)调用兄弟构造器
任意类的构造器中,是可以通过this(…) 去调用该类的其他构造器的。