Android开发学习——Day11(Java基础知识四)
学习目的
进一步学习Java中的基础知识:代码块、内部类、继承和多态。
学习过程
在学完一个知识点的使用之后,便进行摸索尝试,在不断的试错中真正理解其使用。
技术
1.代码块:优先于类加载的代码部分
代码块的使用使用代码块可以在定义对象之前先完成一些准备工作,它是类的一部分。类里面可以有多个代码块,执行顺序和出现的先后顺序相同。
注意:尽量不要在类里面写多个代码块。
2.内部类:定义在一个类内部的类
在编写Java程序的过程中,当我们希望一个类中的部分方法和成员变量抽离出来单独管理时,可以使用内部类。内部类可以有效地进行封装,而且与其外部类有一定的相关性,便于阅读。
当内部类定义为静态时,它犹如外部类,可以被外部直接调用;而当内部类是非静态时,在调用时它犹如其外部类中的一个成员变量。
注意:
1)静态元素均优先于类加载,故当内部类是静态类时,不能调用其外部类的元素。
2)关键字“new”之后只能加构造函数,但在调用内部类中构造方法时(A是外部类,B是内部类),按照正逻辑是:
A.B ab = new A.B();
那么编译器就会出现一个错误——"is not an enclosing class"。故在调用非静态的内部类时,应当:
A a = new A();
A.B ab = a.new B();
没有静态(static)的内部类不能使用外部类进行操作,必须用实例来进行实例化内部类。
3.继承:获得其他类的方法和属性,即为父类,并且按照需要添加自己的属性和方法
用法:
A(子类) extends B(父类){...}
Tips:
1)java里面只能单继承 但可以变相多继承 A->B->C->...
2)所有的类都是直接或者间接继承于Object类
3)当调用子类的一个方法时,如果没有就会到父类里面去查找
4)如果在子类里面需要调用父类的方法或者显式调用父类的属性,用super()
Ps:什么情况下需要在一个方法里面调用super的对应方法?
如果一个方法需要完成一个功能,又不能单独完成,必须要父类做相应的工作,辅助子类完成功能。
1>父类做完之后 子类再操作
2>子类做点事情之后,再调用父类去完成
5)如果子类里面需要重新实现父类的方法,就需要重写方法
重写方法标识符:”@override“,即注明该方法为重写方法
6)如果父类有自定义构造方法,子类的构造方法里必须显式调用父类的构造方法,即辅助子类完成
7)如果父类有内部类 子类中有同名的内部类 那么父类中的内部类就被屏蔽了
8)如果非要使用父类中的内部类,那么只能使用全类名,即——类.内部类
4.多态(polymorphic):同一个方法有多种实现
代码演示--多态如果有继承关系:子类的对象可以使用父类变量接收(类型的自动向上转换)
代码演示--继承接收感悟
学习基础知识的过程是远不及做实战项目有意思的,这点我很明白。但是,没有牢固的基础,往后的项目很定会受到影响。所以,基础要打牢,知识点若是比较抽象,那么就自己找相应环境,尝试着去实现,不断地试错,做到深刻理解。见微知著,积攒点滴,才能汇聚江河。