---------------------- <a href="http://edu.csdn.net/heima" target="blank">android培训</a>、<a href="http://edu.csdn.net/heima" target="blank">java培训</a>、期待与您交流! ----------------------
1、 什么是继承
在程序中,可以使用extends关键字让一个类继承另一个类
继承的类为子类,被继承的类为父类
子类会自动继承父类所有的方法和属性
2、 为什么要使用继承
1> 一个类的功能不行,方法不够用时,就可以增加子类和方法
2> 需要定义一个能实现某项特殊功能的类时,就可以继承
3> 提高代码的复用性
3、 继承的特点
Java只是支持单继承,不支持多继承,但是可以多重继承
不能多继承的原因:如果一个类继承多个类,多个类中有相同的方法,子类就不知道调用那个类中的方法
4、 向上转型
子类对象可以当做父类对象使用,因为父类有的功能子类都有
父类不能当做子类对象,因为子类有的父类不一定有
可以定义一个父类类型的变量来记住子类的对象,这在程序中成为向上转型
5、 强制类型转换
把一个子类当做父类来用的时候,不能调用子类的特有方法
原因:编译器在编译时会做语法检查,看到变量时父类类型那么就会到父类中查找是否有反方法,没有则报错,这样就需要强制类型转换,将父类类型强转成子类类型
以(子类名)变量名的形式强制类型转换
注意:强制类型转换时,无论类型是否匹配编译都不会报错,但是类型不匹配运行时会报错,可以使用instanseof进行判断,
6、 子类覆盖父类方法
覆盖方法是必须和被覆盖方法具有相同的方法名称、参数列表、和返回值类型
:子类的方法返回值类型可以使父类的方法返回值类型的子类
如果在子类中想调用父类中的那个被覆盖的方法,可以使用”supei.方法名”的格式调用
:调用方法是,是在子类中先查找,如果子类有会调用总类的,使用supei形式只在父类中查找,子类有没有都是不调用的
覆盖方法是,不能使用比父类中被覆盖的方法权限更小
:可能将子类对象当做父类对象使用,那么能获得的父类对象中的方法在子类中必须都能获取到
覆盖方法是,不能比父类抛出更多的异常
:子类只能比弗雷强,不能比父类弱
小知识:重载(Overload)和重写(Override)的区别
重载时方法名相同,参数列表不同,和返回值类型无关
重写时方法名、参数列表、返回值类型全部相同
7、 继承的应用细节
子类不继承父类私有成员
:父类中私有成员对外不可见,子类对象中无法访问这些成员
构造函数不能被继承
:构造函数通常用来初始化类的成员变量,父类和子类的成员变量不同,初始化方式不同,构造函数的名字也不同
8、 子类对象实例化过程
子类构造函数中可以使用supeir关键字调用父类构造函数,
在子类创建对象时一定会调用父类构造函数,即使没有娴熟调用,也会默认调用父类无参构造函数
在子类中第一行用this关键字去调其他的构造方法,这时系统将不再自动调父类的。但其他构造函数中会调用父类构造函数。
在构造方法中this和super关键字只能出现一次,而且必须是第一个语句。
9、子类当做父类使用时注意
在调用某个类的一个方法时,此方法声明需要一个父类对象,这时我们可以将一个子类对象作为实参传递过去,注意此时方法定义的形参为父类,在方法中使用父类变量调用方法时,其实是调用子类的方法
---------------------- <a href="http://edu.csdn.net/heima" target="blank">android培训</a>、<a href="http://edu.csdn.net/heima" target="blank">java培训</a>、期待与您交流! ----------------------