封装
主要解决安全性问题
提供对外的输入输出接口(setter和getter、构造方法)
构造方法要调用setter来实现封装
访问修饰符:
public:全工程可见,范围最大
proteced:包级私有+子类可见
默认(什么都不写):包级私有,在同一包的所有类可见
privite:只有本类可见,范围可见
package:用于声明当前类所在的包,必须写在代码的第一行(开头)
import:用于导入当前类所引用的类,正常在package语句下一行
static关键字(静态)
没有ststic关键字的可以认为是对象的,有siatic的可以认为是类的
加static的属性叫做类属性,是全局变量,不论哪个对象或者整个类型来改变属性的值, 都会对其他对象/整个各类造成影响。
加static的方法叫做类方法,是全局方法,一般用于定义工具方法
对象方法可以直接调用对象属性和对象方法以及静态属性和静态方法
静态方法可以调用静态属性和静态方法,但不能直接调用对象属性和对象方法
静态代码块:
只会在第一次访问该类型的时候,执行一次代码块
继承:
关键字为extends,子类对象继承了父类对象的所有内容,但都不可见
静态资源属于类,不属于被继承的范畴
子类构造方法默认来自父类无参
public void 类名 extends 父类名{
static int 变量名;
}
super关键字
父类有有参但没有无参时,子类无法直接写出无参构造,需要用super()指定父类的构造方法
子类可以通过super()关键字指定父类的构造内容
super.属性一般用于区分子类、父类都有的属性
super.方法一般用于区分子类父类都有的相同方法(重写的同时调用父类方法)
super(...)指定父类的构造方法
方法重写的规则:
子类继承父类的前提
方法名相同
参数列表相同
子类方法的返回值要与父类方法相同或者是其子类
访问修饰符不能比父类更严格
不能扩散异常(增大父类抛出的异常)
静态方法不属于对象,不能被继承,调用使用 类名.方法名 的形式调用
静态方法不能与普通方法重名
父类:
public class a{
int abc(int a){
return a;
}
}
子类:
public class b extends a{
int abc(int a){
return a+1;
}
}
多态:
前置条件时父类被子类调用
解释时父类中的方法被子类重写
在别的类中,有一个参数为父类类型的方法,调用了被重写的父类方法
调用(传递实参)时,实参参与子类对象,那么就会调用该子类对象重写后的方法
类型转换:
大类型接受小类型默认为大类型
小类型接受大类型,要进行强制转换(会丢失精度);
常用instanceof关键字判断是否可转
if(对象名 instanceof 类型){
子类型 新对象名=(子类型)对象名:
//可以用新对象名来调用
}