笔记暂未整理:
一、面向对象的第二大特征:继承
1.分类:业务封装 功能封装
2.作用
封装-->属性的安全!
继承-->重用----重用代码(属性+方法)
多态-->扩展
3.实现继承的步骤
①从多个相似的类中,找出相同的属性和方法,提取出来放到一个单独的类里,这个单独的类就叫父类/基类/超类(其他子类共有的属性和方法)。
②多个相似的类中,只保留各自特有的属性和方法,那么这些相似的类就叫子类(自己的属性和方法)
③在子类中,使用extends关键字,继承父类,从而继承父类里的属性和方法。
4.应用继承
extends
5.子类可以继承父类哪些资源
---除了父类的构造方法 不能继承,其他资源都可以继承
---但是继承过来后,还要根据资源的权限修饰符来判断是否可用!
二、方法的重写
1.为什么学习方法?
父类里的方法,解决不了子类的问题,所以子类需要重写。
a.重写定义:
子类中,方法名相同,参数列表相同,返回值相同或者缩小,访问修饰符相同或者扩大
子类private方法就会报错
object 所有的最大的基类
b.重载定义:
同一了类中,方法名相同,参数列表不同,与返回值类型和访问修饰符无关的,两个或两个以上的
三、继承的特性
A.单根性:子类只能继承一个父亲
B.传递性:A3----->B2----->C5
8.继承的方式有两种:
A.使用关键字:A extends B
B.隐式继承: A --->继承object类
9.介绍Object类
java中所有类的根基类:
finalize():提醒垃圾回收机制,清除该对象。(不推荐使用)
clone();克隆 (有隐患存在,不推荐使用)
wait() 等待
wait(long timeout,int nanos)等待
wait(long timeout)等待
notify();唤醒-----多线程的时候讲
getClass();------反射的时候讲
toString();
com.jr.demo5.Student 全局限定
4554617c:哈希码()的16进制整数值
哈希码:对象在内存中的地址,经过一个算法,得到的一个数值
equals(Object obj)
+组合使用:
hashCode();获得当前对象的哈希码--
===集合:Set去掉重复元素!
将两个对象的哈希值,如果哈希值不同,可以存储;
到哈希值相同的情况下:
在使用equals方法进行比较,如果还是相同,不存储;
否则存储进去
10介绍super
super:当前父类对象 super.父类属性 super.父类方法 子类构造中,调用父类构造:super();super("111",333);
this.当前对象 this.对象属性 this.对象方法 构造方法互相调用: this();this("111",333);
===super();必须是子类构造方法中的第一行
this();也必须是构造方法中的第一行
===解决方法:互相不见
11.继承情况下,子类构造方法的执行顺序:
Student stu=new Student();
使用子类构造方法创建子类对象的时候,先找到子类的构造方法,
方法中如果开发者手动调用了父类的构造方法,那么程序将先执行父类的构造方法;
如果开发者没有动手调用父类构造方法,那么程序将自动帮忙调用父类的【无参构造方法】,
如果父类也继承了其他类,继续向上,直到找到Object的无参构造方法。在从Object类开始执行,直到当前Student构造方法执行完
Object 先执行Object的构造
A 在执行A的构造
Person 在执行person的构造
Student 在执行Student的构造 new Student()
12.多态:【只关注行为,不关注属性】
什么是多态?(1)同一个父类的不同子类对象,在进行同一行为的时候,有不同的表现形态,就是多态
(2)"动态绑定":编译期,以父类对象做参考,调用方法;
但是,实际运行的时候,以真正传入的实际参数,来调用对应的方法
===从而达到程序扩展性
实现多态的条件:1.继承2.重写 3.声明父类new子类 Person stu =new Student();
使用多态的场景:
1)例题中、程序中一定有两条业务线:一条是继承线由父子类组成的
一条是关联线,两条线有业务关联,第二天业务线中,父类做参数了;父类做返回值类型了。
好处是什么:提高代码的扩展性,可维护性?
应用多态:
动物园,饲养员喂养动物,猫狗猴子