继承

看到继承,我们一般都会想到儿子继承父亲的财产之类的,那么,在面向对象编程中,什么继承呢?继承就是可以通过扩展一个已有类,并继承它的属性行为,来创建一个新的类,在已有类的基础上进行扩展,这种方式就叫继承,在Java中的继承都是单继承。
已有类叫父类也可以叫基类,而新类就叫子类也可以叫"扩展类",子类在声明的时候就要用关键字extends表明它扩展自父类,有了这个语法它就可以自动具备来自于父类的所有属性和行为,但能否访问要受访问修饰符的限制,而在子类中只需定义它自己特有的属性和行为,子类和父类的关系必须是is-a关系。
子类虽然会自动继承所有来自于父类的属性和行为,但是绝不会继承来自于父类的构造。从语法上,构造方法的方法名必须与类名保持一致,所以子类不会有一个叫父类名的构造方法;从设计理念上说来说,构造方法是产生对象的,父类构造产生父类对象,子类构造产生子类对象,子类不应该具有产生父类对象的父类构造方法。
方法重写:子类通过继承自动具备父类的行为,但由于子类该行为的实现有可能是特有的,所以子类需要重新把这个方法书写一次。子类重写继承而来的方法,并不是新增一个方法,仅仅是把继承而来的某个方法的实现部分按自身的要求重新实现。
方法重写的要求:
1、方法名必须保持一致;
2、参数列表保持一致(参数的类型、参数的个数、参数的顺序);
3、返回类型必须保持一致;
4、子类重写后的访问修饰符必须大于等于父类重写前的访问修饰符;
5、子类重写后不能抛出比父类重写前更多的异常。
Java在底层采用的是内存叠加的方式,当调用子类构造创建子类对象的时候,会自动先调用父类构造创建父类对象部分,然后再调用子类构造叠加上子类特有部分,从而构成一个完成的子类对象。在默认情况下,子类构造都是去调用的父类的无参构造,当父类有多个构造的时候,要使用关键字super()来调用指定的父类构造。
子类可以定义与父类一模一样的同名属性,不会发生覆盖现象,各有各的值,但是这种设计是不合理的。我们需要在子类当中调用的父类被重写之前方法,就要使用super关键字,super.方法名()。
当一个类加上final关键字,它就变成了最终类,意味着这个类也不能被扩展变化了,也就是说不能被继承了;方法加final,就变成了最终方法,意味着这个方法不能被重写;那么,构造方法可以加final吗?不能!因为构造方法不能被继承,当然也就不能被重写,所以构造方法只能在本类中被确定,然后根据确定的定义来使用,也就不存在在其他地方改变的可能,所以不用申明final来定义它的不可更改性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值