javase第十一天学习:基本语法(方法的重写 + protected关键字 + super关键字 +多态性)

一、其他知识理解

1.javabean

javabean是一种公共类,有无参的构造方法,并且其中的private私有属性都有其get/set方法

2.Eclipse中debug的使用

调试程序:硬看+System

eclipse的debug文档:设置断点(双击程序左边,小关卡)。step over 一行一行的走 。step into 进入方法中。step return 推出方法。

二、方法的重写

1.方法重写

名字参数列表都相同。

子类中对父类已定义的方法进行重写,那么运行时子类调用的方法就回覆盖父类的方法

2.方法重写的规定

子类的权限修饰符,不能小于父类的权限修饰符。

即父类为private,子类不能重写方法,子类本身并看不到父类的private方法,子类写的无论什么权限方法都只是重新定义方法,而非重写。
父类为缺省,子类必须为缺省或protected或public,因为若子类比父类权限小,即若子类的方法只能在类内使用,那么类外同一包内父类的方法权限够,此时产生歧义。故子类方法权限必须不小于父类方法的权限。

子类父类同名同参的方法,要么都声明为非static,要么都声明为static(不是重写)

返回值类型

若为基本数据类型或者void,则子类保持和父类相同的数据类型
若为A类的类型,则子类的类型可以是A或者A的子类。即子类包含所有父类的属性和方法,可以返回。

throws

异常类型,子类异常类型不大于父类的异常类型

三、补充protected

1.不同包的子类可以使用

正常情况下,private和缺省在不同包都用不了,public在不同包都可以用,而protected可以在同包以及不同包的子类下可以使用

2.对四种权限的再理解

类的权限:缺省 同一包内 可以new 。public 不同包内 可以new。

方法或属性的权限:在其他类中声明本类时可以访问到的属性和方法的权限。即四种权限是在其他类中利用本类的对象.属性或对象.方法访问的权限

四、super关键字

1.why

子类重写了父类的方法,而子类还想调用父类的方法

2.what

super可以理解为父类的,this理解为本类的

3.how

super可以调用父类的属性,方法,构造器。super.id ,this.id。

super显式调用父类的,当子父类同名时,又想调用父类,必须使用super

重写方法的调用:正常来看,子类重写后只会调用子类重写的方法,而子类调用父类原方法是用super即可

super调用构造器:在子类中,若无显式定义构造器,则会默认一个无参构造器。在父类中,同样如此。故在子类中的构造器中,首行便会自动调用父类构造器即super()。

若子类显式调用父类构造器,必须this和super二选一,必须放在首行。子类用了this构造器,最终也会调用super构造器。

即this构造器先在本类中找,找到后this构造器最终还会再向父类找。super构造器先向父类找,再向父类的父类找。即n个构造器,可能会有n-1个this构造器,但总会有一个直接调用super构造器。

注意,在父类中显式声明一个构造器有形参,那么在子类中构造器默认使用super()无形参的方式即父类的默认构造器不再提供,此时报错。子类有默认构造器,而父类无默认构造器。解决方法除非显式提供父类构造器super(args)。

若子类无构造器,默认student(){super()}

4.子类对象实例化的过程

从结果上来看

子类继承父类则获取了父类声明的属性和方法,创建子类对象后,堆中会加载所有父类的属性和方法

从过程来看

子类构造器直接或间接调用父类构造器,进而调用父类的父类的构造器,直到调用了java.lang.object类的空参构造器,即子类加载过所有父类的类结构,可以在内存中看到并且调用
虽然子类调用了父类的构造器,但并未构造对象,自始至终都是一个对象
注意:getbalance()是获取一个值,不能getbalance-=amount这样来修改balance,必须使用setbalance来获取。

五、多态性(对象多态性)

1.why:传入形参时如果不利用父类,所有子类都要创建一个方法,那么会重载很多,如果利用父类即可加载子类,形参多态性。即要定义方法体中规范的步骤来操作数据

2.what:Person p2 = new Man();即成为子类对象的多态性,利用父类的类型来指向子类的对象即子类对象赋给父类引用。

3.how:Person p2 = new Man();p2.method()只能使用父类的方法或者重写父类的方法。不能使用子类独有的方法。即虚拟方法调用

4.编译时,只能调用父类声明的方法,而在执行期实际执行的是子类重写的方法。编译看左,运行看右。

5.使用前提:类是继承关系,有重写方法。

6.多态性只能使用方法,不能使用属性,即子类定义id,父类定义id,此时并不构成属性重写即无多态性。

7.虚拟方法:编译父类方法,运行子类方法,父类根据赋给他的不同子类对象,动态调用子类重写的方法,运行时才知是new的谁。

8.重载和重写:重载调用地址时编译就已经绑定了谁用谁。而重写在运行时才知道谁用谁。前者为静态绑定,后者为动态绑定。

9.动态绑定和静态绑定:静态绑定即编译时就确定用哪种方法如重载。动态绑定即只有程序到执行阶段才能确定用哪种方法比如重写。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值