类和面向对象编程
static关键词(静态修饰符)
可以修饰成员变量和成员方法
可以修饰通过对象和类来调用(调用的都是同一个)
修饰成员变量表示静态变量,静态变量是所有对象公用的 在内存中只占有一份内存
修饰成员方法表示静态方法,静态方法里面只能访问静态变量
static特点
随着类的加载而加载
优先于对象存在
所有对象共享(可以通过对象或者类来访问)
main方法就是静态方法
使用static的地方:工具类的创建
数组工具类ArrayTool
Arrays.fill(API中关于Arrays的其他方法)
查找在数组中的位置
字符串工具类StringTool
indexOf
自己手动实现
构造方法私有化
静态代码块
放在类里面,只会执行一次(加载类的时候,就执行这个类里面的静态代码块)
Static{
}
继承的特点:
Java支持单继承不支持多继承
继承注意事项
一、子类继承了父类里面的成员(成员变量和成员方法)
子类不能访问父类里面的私有成员
子类对象里面拥有父类里面的私有成员变量(只是不能直接访问)
二、继承中的“是一个”关系(人 老师 学生)
三、子类和父类里面有同名的变量,就近原则(this super)
可以通过super访问父类里面的变量、方法和构造方法
继承中的构造
通过子类的构造方法构造子类对象的时候,都会调用父类里面的构造方法
(对父类里面的属性初始化,不指定就调用默认的无参构造方法)
如果父类没有无参构造方法,要通过下面的调用指定的有参构造方法
怎么指定调用父类里面的那个构造方法
Super(xx,xx,xx,xx);
怎么在构造方法中调用其他构造方法
This(xx,xx,x);
注意:通过this或者super调用构造方法的时候必须在第一条语句
方法重写(方法覆盖)
子类中的方法名、参数和返回值和父类相同
意义:子类跟父类拥有同样的功能,但是子类有自己的特定的内容和特定实现方式。可以定义一个不同的名字方法,但是为了见名知意,保持父类名字,自己重新实现方法体。
重写注意事项
重写的时候,访问权限不能更低(最好保持权限一致)
final 可以修饰类、方法、变量
final类不能被继承
final方法:表示这个方法不能被子类重写
final变量:常量
Java类包(package)
通过包对类进行分类管理,也可以避免重名问题。一种类型的Java类放在一个包里面,或者一个模块的Java类放在一个包里面。不同包里面可以包含同名的类,通过包来区分。
内部类的种类:局部内部类、匿名内部类、静态内部类、成员内部类
继承和多态
抽象类
抽象类里面可以包含正常方法和抽象方法
抽象类可以包含构造方法,但是不能被实例化
构造方法的作用是让子类对父类里面的数据进行初始化
抽象类的子类还可以是一个抽象类(不用实现抽象方法)
抽象类的子类(正常类)必须实现抽象类中的抽象方法
抽象类声明
abstract class xxx{}
接口
接口里面只能包含抽象方法(接口是完全抽象化的类,里面没有完整的方法)
我们可以通过接口定义一个功能(其他类可以实现这个接口来拥有这个功能)用来扩展功能
接口可以被实现、也可以被具体类实现
单继承 多实现
接口定义interface
接口实现class A implements B