static关键字
特点
-
被static修饰的成员变量叫做静态成员变量\类变量
-
被static修饰的成员变量会被该类的所有对象共享
-
被static修饰的成员变量被该类的某个对象修改了,那么该类的所有对象使用的都是修改后的值
-
方式一:
对象名.静态成员变量名
---->不推荐 -
方式二:
类名.静态成员变量名
----->推荐
-
被static修饰的成员方法叫做静态方法,可以使用类名直接调用
-
静态方法中不能出现this关键字
-
静态方法中只能直接访问静态成员变量和静态成员方法
-
静态方法中不能直接访问非静态成员变量和非静态成员方法
-
非静态方法中可以直接访问一切成员变量和成员方法
静态代码块
static {
}
-
随着类的加载而执行,并且只执行一次
-
类的加载: 第一次使用某个类的时候,类加载器就会把该类加载到内存中,只会加载一次
以后开发中static的应用
以后的项目中,通常会需要一些“全局变量”或者“全局的工具方法”,这些全局变量和方法,可以单独定义在一个类中,并声明为static(静态)的,可以很方便的通过类名访问
-
接口也是一种引用数据类型,在接口中专门用来定义方法和常量
-
定义一个接口需要使用
interface
关键字---->接口编译之后会产生class文件
-
接口不能创建对象,只能被类实现(类似继承),实现接口的类叫做实现类\子类
-
实现接口的类如果是普通类,就必须重写接口中所有的抽象方法,如果是抽象类,就可以不重写,也可以重写
实现接口
-
概述:类和接口的关系就是实现关系,类似继承,使用implements关键字来实现接口
接口中成员的访问特点:
常量: 主要是供接口名直接访问
抽象方法: 就是供实现类重写的
默认方法: 就是供实现类重写或者直接调用
静态方法: 只供接口名直接访问
私有方法: 只能在接口内部访问
子接口可以继承父接口中的常量,如果多个父接口中有相同的常量,那么子接口就不会继承这些相同的常量
如果多个父接口中有相同的默认方法,那么子接口必须重写一次该默认方法
公有静态方法和私有方法不存在冲突,因为静态方法和私有方法不会被子接口继承
如果父接口和父类中有相同的抽象方法,子类必须重写一次
父接口中的静态方法不会被实现类继承,而父类中的静态方法是会被子类继承
多态
-
多态是面向对象三大特征之一。
-
多态指对于同一行为,对于不同的对象,具有不同的表现形式。在程序中,表示对同一方法,不同的对象有不同实现。
-
实现多态的前提条件
-
继承 或者 实现
-
父类引用指向子类对象 或者 父接口引用指向实现类对象
-
方法的重写(没有重写方法多态是没有意义的)
-
实现多态
-
成员变量: 编译看左边(父类),运行看左边(父类)
-
成员方法:
-
非静态成员方法: 编译看左边(父类),运行看右边(子类)
-
静态成员方法: 编译看左边(父类),运行看左边(父类)
-
多态的好处和弊端
-
好处:
-
可以将方法的参数定义为父类引用,使程序编写的更简单,提高程序的灵活性,扩展性
-
案例参考多态的应用场景
-
-
弊端:
-
无法直接访问子类独有的成员变量和成员方法(因为多态时成员访问特点编译都是看左边(父类))
-
引用类型转换
向上转型: 子类类型向父类类型转换的过程叫做向上转型,这个过程是自动的
Fu f = new Zi();
向下转型: 父类类型的变量向子类类型转换的过程叫做向下转型,这个过程是强制的
Zi zi = (Zi)f;
避免转型异常
if(变量名 instanceof 数据类型){}
如果前面变量名指向的对象是属于后面数据类型,那么返回true,否则返回false
内部类的概述
-
概述: 将一个类定义在另一个类的里面,里面的那个类就叫做内部类,外面的那个类就叫做外部类
-
特点: 内部类是一个独立的类,在编译后,有自己独立的class文件,前面冠以:外部类名+$+内部类类名.class
匿名内部类
-
本质其实就是一个继承了某个类的子类对象
-
本质其实就是一个实现了某个接口的实现类对象
-
使用场景
-
如果想得到某个类的子类对象,就可以创建该类的匿名内部类
-
如果想得到某个接口的实现类对象,就可以创建该接口的匿名内部类
引用类型使用小结
-
引用类型作为方法的参数传递的是地址值
-
引用类型作为方法的返回值返回的是地址值
-
案例1