面向对象
1、类与对象
类是描述相同事物的共同特征的抽象;
对象是具体存在的实例,是真实的,是类的具体;
2、类的五大成分(有且仅有)
- 成员变量(Filed:描述类和对象的属性信息的);
- 成员方法(Method:描述类或者对象的行为信息的);
- 构造器(Constructor:初始化一个雷的对象并返回引用);
-
代码块
按照有无static区分:
静态代码块【重点】 - 属于类,会与类一起优先加载,而且自动触发一次;可以用于执行类的方法之前进行静态资源的初始化操作;
实例代码块 - 属于类的每个对象,会与类的每个对象加载;每次实例化类的时候执行一次;实例代码块可以用于初始化实例资源;实例代码块的代码实际上是提取到每个构造器中执行的; -
内部类
静态内部类 - 在外部类内部,static修饰;可以访问外部类的静态成员,不能访问实例成员外部类名称.内部类名称 对象名称 = new 外部类对象.内部类对象
实例内部类(成员内部类) - 属于外部类对象,不能定义静态成员
外部类名称.内部类名称 对象名称 = new 外部类对象.new 内部类对象
局部内部类 - 代码块中定义【木有软用】
匿名内部类(重点) - 就是一个没有名字的局部内部类,为了简化代码;
3、三大特征
3.1 封装 - 隐藏实现细节,提供公共访问方式;可以提高安全性,实现代码的组件化;
3.2 继承 - 子类到父类的一种关系,子类继承一个父类,就可以直接得到父类的属性和行为;提高代码的复用;
访问特点:就近原则,子类有就用子类的,子类没有父类找,父类没找到就报错;
构造器的特点:子类构造器默认一定会先访问父类的无参构造器,再执行子类的构造器;
方法重写要求:
方法名和形参列表要和父类一致;
返回值类型范围小于等于父类的;
修饰符权限要大于等于父类的权限;
抛出的异常要小于等于父类;
3.3 多态 - 父类的引用指向子类的对象 Person person = new Student();同一个类型的对象,执行同一个行为,在不同的状态下会表现出不同的行为特征;
识别技巧:
方法的调用:编译看左边,运行看右边;
变量的调用:编译看左边,运行看左边;
4、权限修饰符
private |
缺省 |
protected |
public |
|
本类中 |
可以访问 | 可以访问 | 可以访问 | 可以访问 |
本包下其他类中 |
可以访问 | 可以访问 | 可以访问 | |
其他包下的类中 |
可以访问 | |||
其他包下的子类中 |
可以访问 | 可以访问 |
5、关键字说明
5.1 this关键字 - 代表了当前对象的引用;
5.2 static关键字 - 区分成员变量和成员方法是属于类还是属于对象的,表示在内存中只能有一份;
5.3 final关键字 - 最终的含义,可以用于修饰类,方法,变量;
修饰类:类不能被继承;
修饰方法:方法不能被重写;
修饰属性:属性有且仅能被赋值一次;
扩展1: final, finally, finalize的区别?
扩展2:常量的定义
public static final
6、抽象类
6.1 是什么 - 拥有抽象方法的类,抽象类不能被实例化;
6.2 作用 - 为了被子类继承,约束子类必须重写抽象方法;
6.3 注意事项
抽象类不能被实例化;
抽象类有且必须有构造器,用于提供给子类创建对象时初始化父类成员使用的;
抽象类中,不一定有抽象方法,拥有抽象方法的类一定是抽象类;
抽象类的子类,必须重写父类的抽象方法,否则子类也必须定义为抽象类;
抽象类存在的意义是为了被子类继承,抽象类体现的是模板思想。;
7、接口
7.1 是什么 - 接口体现的是规范思想、约束,接口比抽象类更抽象,是更加彻底的抽象,子类实现接口,必须重写全部的抽象方法,在JDK1.8前接口只能是抽象方法和常量;
7.2 接口的成分
#抽象方法 public abstract 返回值类型 方法名(形参);//public abstract 可省略 #默认方法,其实就是我们之前写的实例方法只能用接口的实现类调用 public defalut 返回值类型 方法名(形参){ 方法体... }//public可省略 #静态方法,接口的静态方法只能用接口的类名称调用 public static 返回值类型 方法名(形参){ 方法体... }//public可省略
7.3 注意事项
如果实现了多个接口,多个接口中存在同名的静态方法并不会冲突;原因是只能通过各自接口名访问静态方法;
当一个类继承父类并实现若干接口,父类中成员方法和接口默认方法重名时,子类就近选择父类的成员方法;
当一个类实现多个接口时,多个接口存在同名的默认方法;实现类必须重写这个方法;
接口中,没有构造器,不能创建对象;