Java基础——Day11
回顾
1. final
①修饰变量:就是常量,比如PI
②修饰方法:不允许子类重写,只让你调用。【你认为这个方法已经写的Perfect了】
③修饰类:你这个类已经很完善了或者你自己一个类似JDK的工具集/框架,此时就可以将其定义为 final
2. static
①修饰变量:类变量,通过类名调用,用于共享数据【每个对象操作后,别的对象拿到的都是最新 值;而不是自己跟自己玩】,一般我们会结合final一起使用,定义全局常量
②修饰方法:一般是放在工具类中。好处就是通过类名调用,即使调用n次,也无需创建n个对象 去调用,就不需要频繁的GC,同时也节省了我们堆内存空间。
③修饰代码块:静态代码块,具体使用我们在讲到JDBC的时候,我们去初始化连接信息的时候会 用到
知道跟普通代码块、构造方法执行的先后顺序
3. Object
① toString() :直接输出对象名 跟 对象名.toString() 没有区别,你用 对象名.toString() 多余
② equals() :自定义比较规则,比如String,比较是内容而不是地址值,因为它重写了 equals equals vs ===
③ hashCode :你就把当做是在内存中的某个位置,一般我们在重写equals的同时还要重写 hashCode
④ getClass :间接通过这个,拿到全类名,以及简单类名
多态
1.1 为什么要用
宠物乐园为例,我们为宠物喂食,我们新增了一个主人类,添加了一个 feed 方法,根据我们前面的知 识,我们可以在 Master 类中,编写多个重载的方法。但是发现,若新增了一个宠物类,我们又需要添 加一个重载方法,在 Master 这个类中, feed 方法的可维护性和扩展性不太好。同时我们发现,我们的 形参都是Pet的子类,能否使用父类作为形参传递呢? ----》Java给我们提供了一种机制,我们称之为多 态。
好处:可以提高代码的扩展性和维护性。
1.2 什么是多态
1.2.1 生活中多态
生活中的多态就是一个实体【对象】在不同场景下的形态【身份】
帅哥:兄弟
路上:路人甲
1.2.2 程序中的多态
父类引用指向子类对象 Pet pet = new Dog(); 声明看左边,运行看右边;而且使用的时候,调用是子类重写之后的方法,而不是父类继承过来的 方法,虚方法调用。
1.2.3 前提
1. 继承或者实现关系
2. 继承过来的方法,在多态场景下,不重写的话,其实是没啥意义的。
1.2.4 向上转型
多态,即父类引用指向子类对象
Pet pet = new Dog();
1.2.5 向下转型
就是我们前面的强转:大类型转为小类型,只不过前面我们用的基本类型转换,这里用的是引用类 型,换了一个新的概念而已。
多态的弊端:子类特有的东西调用不到,需要将其还原到本质【子类类型】
注意:在向下转型的过程中,为了避免类型转换的问题 ClassCastException ,使用 instanceof 做判断 之后,在进行转换
1.3 应用场景
1. 使用父类作为方法的形参,在调用方法的时候,使用多态机制。
2. 使用父类作为返回值类型