目录
一、面向对象三大特征之三:多态
多态是最重要的面对对象的特征!!!
1.1多态的概念,多态的形式
什么是多态?
举例说明:狗和乌龟,两者都是同类对象。同时执行相同行为:比如说跑。狗和乌龟的跑步行为不一样。这就是多态的变现。
多态的常见形式:
接口:可以理解为是“干爹”之意。
形式理解:小范围的变量在大范围的变量内,所以形式合理。
多态中成员访问特点:
方法调用的解释:
a.run():编译看的是左边的动物,但是执行的话还是运行的右边子类中的方法内容。
a.name:变量的输出,编译和运行都看的是左侧父类中的内容,所以输出的运行结果是父类中的内容。
多态的前提:
这点很重要!!!!!
1.2多态的优势
解耦合:互相依赖不是那么强。
后面是乌龟,可以直接将乌龟直接修改为其他存在与父类Animal存在父子关系的其他的子类,比如说狗。如下所示:
案例如下:定义一个跑的方法,将动物这个父类传递给方法中,在主函数中年可以调用父类中所有子类的对象。
多态下会产生一个问题:
解释:由于编译的时候看的是左侧的内容,是考虑的是左侧父类的内容,父类是不包含子类的独有功能内容的,所有不能使用子类的独有功能。
1.3多态下的引用数据类型的类型转换 113
父类转子类:自动转换
子类转父类:就是子类中的方法,父类中没有,会报错,但是可以使用强制类型转换来进行。
比如:本案例中,父类Animal没有子类乌龟的下蛋方法,所有可以使用强制类型转换,让本属于乌龟下蛋的行为(方法)进行操作。
强制类型转换:
使用instanceof进行强制类型判断:
总结:
1.2多态的案例
案例:
代码看工程文件。
二、内部类
2.1内部类概述 114
2.2内部类之一:静态内部类(了解)115
什么是静态内部类?
静态内部类创建对象的格式:
静态内部类的访问拓展:
对拓展的2进行补充说明:
总结:
2.3成员内部类 115
什么是成员内部类?
成员内部类创建对象的格式:
使用的解释:
首先是通过new Outer()创建新的空间,在这个空间里面找到了新的方法,寄生在外部的类中。
先用外部类的构造器,在堆内存中开辟一片空间,再用内部类的构造器在刚刚外部类构造器开辟的空间里开辟空间。
注意:内部的静态方法的调用形式:
成员内部类的访问拓展:
总结:
案例:
2.4局部内部类(了解知道即可,比较鸡肋)115
2.5匿名内部类概述(重点) 116
匿名内部类的特点总结:
总结:
疑问?匿名内部类会不会产生class文件呢?
在工程中的out文件夹下会有显示。
2.6匿名内部类常见使用形式 (使用语法)116
作为一个方法的入参。
其中的s2被匿名类为方法 被当作是参数的输入。
代码查看工程文件。
理解:把接口类型通过匿名内部类实例化的子类对象 作为参数传给别的方法 别的方法又通过子类对象回调
2.7匿名内部类真实使用场景演示 116
可视化窗口的创建程序:
三、常用API 117
API的含义概念:
3.1Object 117
Object的toString方法:
快速将子类内容进行重写的方法:
方法一:自己编写。
方法二:使用快速生成:
方法三 :
输入tos后进行回车操作自动生成。
总结1:
Object的equals方法:
总结2:
3.2Objects 117
总结:
3.3StringBuilder 118
StringBuilder的注意:
StringBuilder是字符串的拼接,拼接的效率好。
为何StringBuilder的拼接效率高:
1、String类拼接字符串原理图
解释:
一个加号,堆内存中俩对象:首先是new出来在堆内存当中001,由于是String类型的,所以还需要做进一步的转换,转换为另外的一个对象002。所以说是一个加号,堆内存出俩对象。
2、StringBuilder提高效率原理图
只产生一个对象。
总结:相比之下StringBuilder只产生一个对象。所以提高了拼接的效率。
总结:
StringBuilder案例:
3.4Math 119
就是调用的相关的数据,进行数学的计算等。
解释说明,如何利用random生成0-6之间的随机数
3.5System类 119
解释:
1、终止程序的运行
2、单纯的输出这个时间是记录的1970年1月1日的时间
PS:可以使用该语句进行代码的时间的计算。
为何计算机的起点时间为1970年1月1日?
3、进行数组的拷贝
数组拷贝:
3.6BigDecimal类 119
BigDecimal类作用:
解决运算进行时候的精度失真的情况发生。
BigDecimal类的使用步骤:
注:调用方法使用BigDecimal类是最好的方式。精致使用构造器来使用BigDecimal类
代码展示:
BigDecimal类是需要一定的精度的要求:
解决报错问题: