一、static(共享的、属于类的,和对象无关的)
1、static特点
2、static内存图(静态变量内存图)
- 对象:只有出现了new关键字,才会在堆内存开辟空间,该空间内存储的是非静态变量;
- 静态区里的变量是对象共享的,在内存中只有一份,谁用谁去拿;非静态的的变量是每一个对象独有的,每一个对象单独存放的。
3、工具类(静态方法的使用场景)
(1)定义
- 构造方法私有了在外界就不可以创造这个类的对象了
(2)exampl 定义数组工具类:
- ArrayUtil工具类printArr方法
- ArrayUtil工具类getAverage方法
- 测试类调用
(3)exampl 定义学生工具类:
- 定义学生类
- 定义学生工具类
- 测试类调用
直接用类调用
4、static注意事项
-
静态方法中没有this关键字
-
静态方法中,只能访问静态
-
非静态方法可以访问所有
(1)举例角度:
- 非静态的东西往往是和对象相关的,比如某个对象的name、某个对象的age,所以里面的this和对象相关
静态一般都是共享的,和某一个对象没有太大关系,所以在静态中没有this关键字 - 在静态方法中,没有this,不知道对象,只能访问静态
- 静态方法也可以通过对象调用,所以非静态方法可以访问所有
(2)内存角度:
在静态加载到内存中后,如果没有创建对象,这个时候内存中是没有非静态的数据的,静态的东西是可以相互调用的。静态无法调用非静态。
- 静态方法不能访问非静态成员变量
非静态成员变量又称实例变量
在Student调用method()方法后,没办法输出 name ,因为这个name是非静态的,此时堆内存中还没有对象。 - 静态方法不能调用非静态成员方法
- 非静态方法可以访问所有
5、main方法
二、继承
1、封装
2、继承
重复太多,提取共同,创建新类
3、什么是继承,继承好处,什么时候用继承
coder不是goods,不可以这么继承,需要分开写
4、继承的特点
5、子类可以从父类继承哪些内容
- 父类的构造方法不能被子类继承
- 不管是私有的还是非私有的成员变量都是可以被继承,但父类的私有成员变量子类不可以直接使用,需要用get/set方法
- 只有父类中的虚方法才能被子类继承
6、继承中成员变量,成员方法,构造方法的特点
(1)成员变量的访问特点
就近原则:谁离我近,我就用谁
(2)成员方法的访问特点
(3)构造方法的访问特点
7、方法重写
(1)方法的重写
(2)重写的本质
(3)方法重写注意事项和要求
(4)总结
8、this,super使用总结
访问构造方法里this():表示调用本类其他构造方法
三、多态
1、多态
2、多态的应用场景
不使用多态:
使用多态:
3、多态调用成员的特点
变量调用:编译看左边,运行也看左边
方法调用:编译看左边,运行看右边
4、多态的优势和弊端
example:a01polymorphismdemo1
(1)优势:方法中,使用父类型作为参数,可以接收所有子类对象
解耦合:此时p.work调用的是学生的work方法,但如果我想使用老师的work方法,只需要改掉红色就可以了,不需要改动后面的代码。(想要使用不同对象实现相同动作)
(2)弊端:不能使用子类特有功能
- lookHome()和catchMouse()是狗和猫特有的方法,Animal的对象a没办法调用lookHome()。
- 解决办法:把a强制类型转换为Dog,不可以瞎转,如果转成Cat类会报错。
- a instanceof Dog:判断a是不是Dog类,返回boolean类型。
- a instanceof d:判断a是不是Dog类,如果是,赋给d,如果不是,返回false。
(3)总结
四、包、final关键字、权限修饰符、代码块
1、什么是包
全类名:包名+类名
2、使用其他类的规则(导包规则)
3、final关键字
最终的->不可被改变的
4、常量
核心:常量记录的数据是不能发生改变的
5、权限修饰符
6、代码块
(1)局部代码块
(2)构造代码块
(3)静态代码块
(4)总结
五、抽象类
1、抽象方法,抽象类
构造方法作用:当创建子类对象时,给属性进行赋值
2、抽象类,抽象方法的意义
这样会让代码不统一,无法限定子类中方法书写的格式,在调用的时候需要去看每一种子类的调用方法
定义抽象后,就可以只看抽象类
3、总结
六、接口
1、相关定义
接口和接口:如果实现类实现的是最下面的子接口,需要重写这个体系里所有的抽象方法。(所有接口的)
2、练习
3、相关知识
(1)定义有方法体的方法
(2)定义私有方法
格式1是普通私有方法,给(1)中默认方法服务的
格式2是静态私有方法,给(1)中静态方法服务的
(3)总结
4、接口的应用
5、适配器设计模式
七、内部类
1、内部类
2、内部类的分类
(1)成员内部类
1)成员内部类
2)创建成员内部类的对象
3)成员内部类如何获取外部类的成员变量
4)总结
(2)静态内部类
总结:
(3)局部内部类
(4)匿名内部类
匿名内部类的对象
1、继承\实现关系:实现swim接口
2、方法的重写:public void swim(){}对父类/接口内方法的重写
3、创建对象:下面最外层大括号是 没有名的类(匿名类)
下面相当于创建了一个animal类的子类dog的对象
swim接口的实现类对象:swim s
该对象可以调用本类中的所有方法
总结: