java中的继承

1.继承
什么是继承?继承就是对类的共同特性的提取从而提高对代码的复用率

1.1 继承的语法
class 子类名称 extends 父类名称

使用过程中需要注意的事项:

(1)变量的作用域:

        1)如果子类与父类没有重复的变量,那么在子类中有的则使用子类中的变量,没有则会用从父类继承下来的变量。方法同样

        2)如果子类与父类有相同的变量,但变量初始化的值不同,则优先用自己(子类)的(就近原则)。方法同样

        3)如果想要访问父类中的方法或者变量,则会用到super关键字,super.成员方法/super.成员变量。

(2)非继承关系中代码块的执行顺序:

        1)静态的先执行(如果都是静态的,比如静态方法,静态代码块,静态成员方法和变量,此时就要看定义时候的顺序了)

        2)非静态的再执行(如果都是非静态的,比如实例代码块,定义的非静态成员变量和成员方法,此时就要看定义的顺序了)

        3)对应的构造方法最后执行

(3)继承关系中代码块的执行顺序:

        1)父类的静态代码块和子类的静态代码块先执行。(只执行一次,后续再new相同对象的时候不会再执行一遍)

        2)父类的实例代码块和构造方法然后紧接着执行

        3)子类的实例代码和构造方法然后再执行

(4)关于private的问题:

如果父类中有变量是被private修饰的,这个变量也是可以被继承的,但是不能直接进行访问,必须通过父类提供的getter和setter方法来访问该变量,否则将没法访问该变量!!!

(5)继承不能是不能够多继承的,只能单继承,如果想要实现多个继承的这种关系,可以用接口来实现,接口是支持一个类实现多个接口的。

     

1.2 重写与重载
(1)重写:

方法名,返回值类型,参数类型和个数都不能发生改变,只有方法体内部的具体实现发生改变,这部分就是你写自己想要实现的内容,一般在继承和接口中使用。。

*被final,private,static修饰的方法,都不能被重写。

*被重写的方法的访问限定修饰符在子类中必须大于等于父类。

(2)重载:

返回值不同或者方法参数个数不同,但方法名相同。需要注意一种情况:返回值相同,参数个数相同,方法名也相同,但每一个参数类型不同,这种情况不是重载。

1.3 super关键字
super通常有三种用法:super.成员变量;super.成员方法;super()(这个跟this()的作用差不多)

对于前两种用法,都是用来访问父类的变量或者方法,都只能在非静态方法中使用。

对于第三种用法:

(1)super()表示调用父类的构造方法,帮组父类的成员变量进行初始化,一旦一个类继承了某一类就必须先帮组父类进行构造,然后才是自己构造。(如果父类有构造方法,那么子类中是一定要有构造方法的,否则会报错;但如果父类没有构造方法,那么Java会默认提供一个无参构造方法,此时super()可写可不写,因为编译器会默认提供一个,此时如果想要在子类中对父类的变量进行初始化,可以通过super. 来帮助初始化)

(2)super()跟this()一样,都只能在构造方法中使用,并且必须是构造方法中的第一句,且他俩不能同时存在。

super只能指代自己的直接父类

2.多态
什么是多态?多态就是完成某个行为的时候,当不同的对象去完成所产生的状态不同。也就是说,当父亲的引用,引用的子类对象不同时,调用这个重写的方法,所表现出来的行为是不同的。

2.1 动态绑定
谈到多态就会谈到动态绑定,动态绑定是多态的基础。那什么是动态绑定呢?就是在运行时编译器才确定到底要执行哪一个方法,编译时和运行时确定执行的方法不同。

而动态绑定又有三个条件:

  1)向上转型:子类的对象给到父类的引用。有很多种方式能够引发向上转型:这里采用直接赋值,还有返回值向上转型和传参的时候发生向上转型。一般来说都是采用直接赋值发生向上转型。

比如:Animal为父类,Dog为子类

  2)子类必须重写与父类同名的方法。

  3)通过父类对象的引用来调用子类中重写过后的方法。

满足以上三个条件,我们就说此时发生了多态也就是动态绑定

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值