一、封装
所谓封装就是将一些方法、属性都放到一个类里面
alt +insert 可以直接生成get set 方法
将类属性都写私密,然后需要get set方法来在类内访问这些私密元素,从而在外部能实现数据的修改和访问。
二、继承(只有单继承)
1、概述及相关
继承 extends
(1)子类继承父类就有了父类的全部方法,构造器的调用父类优先于子类。
所有类直接或间接继承object类
(ctrl+h 可以看到类关系)
this是调用本类元素或方法,super是调用父类元素或方法。
子类构造器默认调用父类无参,所以父类必须有无参构造;
super(有继承才能使用):
<1>调用父类的构造方法,必须在构造方法的第一行
<2>super只能出现在子类的方法或者构造器中
2、类间关系
类与类之间的关系还有依赖、组合、聚合
方法的调用只和等号左边的定义有关。
3、重写(ALT+INSERT 快捷重写)
重写必须要求两个类为继承关系
条件:<1>方法名,参数列表必须相同
<2> 范围可以扩大,不可以缩小
public > protected > 不规定 > private
<3>抛出的异常 范围可以被缩小,不能被放大
三、多态
1、多态对方法而言,与属性无关
2、多态对方法的使用,需要父类引用指向子类
当发生重写调用时调用的是子类的方法
~子类独有的方法,即使父类引用指向子类也不能调用
注:static 静态方法,final常量方法,private修饰方法不可重写
四、其它
1、局部变量
所谓局部变量就是分配空间在栈内的变量,程序结束后会自动释放空间。
包括:方法形参,方法变量,代码块变量,构造器变量,构造器形参
2、初始值
类的属性(成员变量)会自动赋予初值 null(数组,类,接口) 0 0.0 false
3、权限
四大类:public,private,protected,缺省
4、内存解析
(1)匿名对象
匿名对象每次定义都是新开辟空间,没有显示赋变量名,只能调用一次
要想匿名对象调用多个函数的话可以封装一个类,将要调用的函数全都封装到一个类里面
在传入的参数为引用值是对象,可以直接传入匿名对象
5、instanceof
前面为引用类型,后变为一个类
用来判断前后两个类是否为父子类 是返回true 不是返回false
比较类需为两个有关系,无关系编译阶段就会报错
6、类型转换
类的类型转换类似于变量的类型转换
要先父类引用指向子类对象
子类转父类(低转高)直接转换
父类转子类(高转低)强制转换,转换可能会有方法的丢失,转换后父类可调用子类的方法
7、static
static 意为静态
当修饰属性时,就变成了类的属性,无法继承给子类且可以直接通过类名来调用,方法同理
静态方法只可以调用静态的方法,动态都可调用
代码块中
static在类中修饰代码块时,跟随类创建一起创建,所以静态代码块只执行一次,
而普通代码块是在类创建之后有的。
执行顺序为:静态代码块 > 代码块 > 构造器
8、抽象类(abstrct)单继承 多继承通过接口实现
抽象类不一定要有抽象方法,有抽象方法的类必须为抽象类。
抽象类被继承时,子类必须重写父类的抽象方法(子类也为抽象类时不需要)。
抽象类不可被创建对象(无法实例化),需要通过子类来实现。
子类如果想继承抽象类,要么子类重写父类抽象方法,要么子类也为抽象类
9、接口(interface)约束
接口就只有规范,没有其具体的方法体 默认public abstrct(即抽象)。
只有定义没有实体,不可以被实例化。
接口需要实现类来实现类(重写接口的抽象方法或者抽象类继承)来实现。
也可多态实现:具体类多态,接口多态,抽象类多态
此时的类不再是继承(extends)而是接口implements。
在接口中定义的都是常量(默认 public static final)。