面向对象高级篇
1.static关键字
2.继承
3.final关键字
4.抽象类
5.接口
6.多态
7.代码块
8.内部类
8.Lambda表达式
一、static 关键字
1.static关键字:可以修饰成员变量(常用作共享数据),也可以修饰成员方法(常用作工具类)
2.static关键字修饰成员的特点:被其修饰的成员,被该类的所有对象共享;
往往习惯于用该类 类名. 的方式调用static修饰的成员;
随着类的加载而加载,优先于对象存在;
3.static修饰的成员运行时是被加载到堆内存当中,有一片专门开辟的该类的静态成员变量区。
程序运行时,主方法所在的类和包含static关键字的A类以字节码的形式被加载到方法区,主方法区中的main方法被虚拟机自动在栈内存中执行,若此时实例化A类对象a,栈内存中开辟的main方法区中会定义出变量用于接收堆内存中开辟的对象a的地址值。
4.注意点:静态方法中,只能访问静态成员(即静态变量或静态方法);static方法中(包括main方法)不能使用this关键字(c.StaticDemo2.this' cannot be referenced from a static context)
二、继承
1.继承:让类与类之间产生关系(子父类关系),子类可以直接使用父类中非私有的成员(成员变量、成员方法、构造方法)
2.当子类和父类中拥有重名的成员变量时,根据就近原则,优先使用子类中的成员变量;若想用父类中的成员变量,用super.变量的方式在子类方法中调用
3.子类可以继承父类当中方法并调用(非私有),想做一定修改,可以方法重写(方法重写需要保证子父类方法声明完全一致-----方法名,参数类型,返回值类型)
方法重写注意:父类中的私有方法不能被重写;子类中重写的方法访问权限必须要大于等于父类的,往往子类重写的方法访问权限与父类保持一致
4.权限修饰符
主要关注private和public即可,其余两个不常用
5.Java继承的特点:Java只支持单继承,不支持多继承,但支持多层继承
为什么不支持多继承?多个父类中成员名可能重名,子类调用时会冲突
为什么支持多层继承?根据就近原则
6.继承中,构造方法可以被子类继承,只是需要子类自己手动编写;
子类在初始化之前,需要先完成父类的初始化,否则无法访问父类中的成员;
在所有的构造方法中,都默认隐藏了super();通过该行代码,访问父类的空参构造方法
7.this和super
this()和super()都在争夺构造方法中第一行的位置,所以二者不能共存
三、final 关键字
1.final关键字可以修饰方法(方法不能被重写)、变量(不能被再次赋值)、类(不能被继承)。
2.final修饰的如果是基本数据类型变量(byte、short、char、int、boolean、double、float、long):该变量的数据值不能发生再次改变;
如果修饰的是引用数据类型,引用数据类型的地址值不能发生改变,但是地址里面的内容是可变的;
如果修饰的是成员变量:需要在构造方法结束之前完成赋值