day13_我的Java学习笔记 (多态_行为多态+多态的优势and劣势、内部类_静态内部类+成员内部类+局部内部类+匿名内部类、常用API_Object类、StringBuilder、Math、System、BigDecimal、 本节回顾总结)

1. 面向对象三大特征之三:多态
1.1 多态的概述

- 创建一个类的对象:
String name = "诸葛孔明"
int age = 18;
double score = 80.01;
------------------------------------
类名 对象名 = new 类名();
------------------------------------
Scanner sc = new Scanner();
Random r = new Random(System.in);
------------------------------------
Dog a = new Dog();
Tortoise a1 = new Tortoise();
- 多态的形式:
父类类型 对象名称 = new 子类构造器;
接 口 对象名称 = new 实现类构造器;
------------------------------------
Animal a = new Dog();
Animal a1 = new Tortoise();
------------------------------------
①.狗对象的类型,也是动物类型,从现实角度,狗就是动物,所以你可以把狗对象赋给动物类型的变量。
②.从之前我们Java基础课程day02讲的类型转换来看,小类型可以转换成大类型,而动物的范围大于狗的范围,
你把一个小范围的类型给到一个大范围类型的变量,是没有问题的。
![]()
![]()
![]()
![]()

- 多态实现的3个必备条件:
①、有继承/实现关系;
②、有父类引用指向子类对象;
③、有方法重写。
多态中成员访问特点:(多态侧重行为式的多态)
①、多态的方法调用,看右边,右边子类中是如何调用该方法的,就运行展示该结果 (方法调用:编译看左边,运行看右边。)
②、多态的变量调用,看左边,左边父类是如何定义该变量的,就运行展示该结果 (变量调用:编译看左边,运行也看左边。)
1.2 多态的优势

- 在多态形式下,右边对象可以实现解耦合,后续业务行为随着对象改变而变,后续代码无需修改,便于扩展和维护。
- 定义方法的时候,使用父类型作为参数,该方法就可以接收这父类的一切子类对象,体现出多态的扩展性与便利。
多态的劣势:多态下不能使用子类的独有功能
1.3 多态下引用数据类型的类型转换 (可以解决多态的劣势)







Java建议强转转换前使用instanceof判断当前对象的真实类型,再进行强制转换
1.4 多态的综合案例 (*** 值得学习,还算挺简单的)



















2.内部类
2.1 内部类概述


2.2 内部类之一:静态内部类 [了解]








静态内部类的访问拓展:
2.3 内部类之二:成员内部类 [了解]














【思考】:什么时候用静态内部类? 什么时候用成员内部类呢?
答:其实是都可以的,因为都是先有外部类才有内部类。(但是结合现实的真实场景来看,成员内部类,会应用的更多。)
成员内部类-面试题
2.4 内部类之三:局部内部类 [鸡肋语法,了解即可]




2.5 内部类之四:匿名内部类概述 [重点]
![]()
【注意】: ①.抽象类是不能创建对象的; ②.接口是不能创建对象的。③.匿名内部类,相当于抽象类or接口or当前new那个类的子类。







匿名内部类,编译后是可以产生class文件的。
2.6 匿名内部类常见使用形式


多态的形式,来实现不同的行为:
匿名内部类的写法:
使用总结:匿名内部类可以作为方法的实际参数进行传输。(进一步简化代码!!!)
2.7 匿名内部类真实使用场景演示


整个都是登录按钮,铺面了整个窗口。
我们在这个窗口上定义一个桌布panel,窗口win相当于桌子,然后把按钮添加到桌布上,桌布可以自布局,适应窗口的大小(窗口不行,窗口是自动铺满)
但是我们单击登录按钮,没有反应,此时我们需要给按钮添加一个绑定事件
匿名内部类,最终的目的是为了,简化代码:
3.常用API

3.1 Object类




3.1.1 toString方法












像这种重写toString()方法,可以不用自己手写,有万能快捷键:
超快快捷方式:输入toS后,快速回车,再快速回车,就好了
3.1.2 equals方法




"==" 可以比较两个对象的地址是否相同;
对象的equals()方法,也是比较两个对象的地址是否相同;【Object的equals方法】存在的意义:父类equals方法存在的意义就是为了被子类重写,方便子类自己定制比较规则。
String字符串的equals()方法就是比较内容
这里不能用o.name,因为o内部还是object类型,没有name属性,那怎么办呢?
强转 o --> s2
上述代码可以通过IDEA自动生成:
3.2 Objects









3.3 StringBuilder
















[案例]:打印整型数组内容
3.4 Math





3.5 System





3.6 BigDecimal


















本文来自博客园,作者:子沐呐吖,转载请注明原文链接:https://www.cnblogs.com/SuperLee017/p/18139724











































































浙公网安备 33010602011771号