封装:
装:将内容装入到某个地方。例:将相应的属性、行为装到一个类中
封:让内部内容不可见。例:将所有的属性私有化
在Java类的封装中,会提供get(可读)/set(可写)的操作
继承:类的扩展,扩展得到的称为子类/派生类,扩展的原型称为父类/基类/超类,使用extends关键字来继承父类
在内存中,先是根据父类的内容进行加载,然后加载子类附加项,从而生成一个完成的子类对象
如果想修改父类的行为,则需要重写
什么是重写?在子类继承父类时覆盖父类原有的行为
重写的要求:方法名,参数列表、返回类型都与父类相同
使用super来调用父类的属性和行为,使用this调用本类的属性和行为
super()也可以指代父类的构造器
在子类构造器中,第一行会默认调用父类的无参构造--super()
多态:相同行为,不同实现
多态分为:静态多态和动态多态
静态多态:在程序运行之前就已经知道结果的多态--突出表现为:重载
动态多态:在程序运行之前无法预知结果的多态
动态多态的相关技术:1.向上转型 2.instanceof 3.动态绑定机制
抽象类:在类的定义时的class前面加上一个abstract关键字
抽象类不创建对象,或者说抽象类不能使用new等措施创建对象
抽象的事物没有被描述清楚,所以不能有具体的实例
抽象的可以是类,也可以是方法
被abstract修饰符的类--抽象类
被abstract修饰符的方法--抽象方法
抽象方法不能方法的实现也就是{}以及{}里面的语句
如果继承后的类没有描述清楚父类的内容,即:没有重写抽象内容其类也应该变成抽象类
final的使用方式:
作用1:常量,在变量前加上final,表示无法改变的量
作用2:最终的类,在访问修饰符后面加上 final,就无法继承该类,从而没有子类
作用3:最终的方法,在访问修饰符后面加上 final,就无法被重写了,但能不能被继承呢?--能被继承
类的高级概念
1.访问修饰符--权限问题
public--公共的--只要是本工程的类都能被使用
protected--受保护的--除了不同包的非子类不能用,其它的都行
默认不写--只能使用同包的
private--私有的--只能本类使用
2.标准JavaBean规范--类的书写要求
1.所有属性私有化
2.提供公共无参构造
3.重写toString方法
4.提供get/set方法
3.静态static
static: 静态可选修饰符 可以用于定义:静态属性/静态方法/静态初始化块
与类有关的,被类操作的变量--静态变量(类变量)
与对象有关,被对象操作的变量--非静态变量(非静态成员变量)
全局变量
区别1:类变量与类有关,可以使用类名.变量名来调用,也可以对象.变量名(不应该使用)
不应该使用的原因:对象操作类变量时,只要一个对象对类变量进行了改变,类变量就发生了改变,导致所有对象中该类变量发生改变
区别2:在Java中的加载时机,静态方法在类加载时加载,非静态方法在对象创建时加载
一个类文件中能不能写多个类?
每个类与每个类之间没有包含关系就可以,但是其它的类访问修饰符只能是默认的--只能有一个类被public修饰
原因:类文件的名字和public修饰符的类名一致
内部类也可以继承其它类,外部类也可以,进而达到一种多继承的效果
接口:是一种数据类型
接口是比抽象类更为抽象的一种表现形式--不是类
接口创建,只需要将class替换为interface
接口中的方法都是抽象的
接口中的方法可以不用abstract关键字修饰,但是默认为它修饰
注意:抽象类可以让别的类继承,而接口需要其它类实现它
接口的实现和继承类似,在类名后书写 implements
类可以多实现接口,并且还可以继承时同时多实现
一个接口中可以有多个抽象方法,一旦有一个实现类来实现接口,则需要都实现
如果有一个抽象方法没有实现,则需要将该类定义为抽象类