Java面向对象
一、面向过程 & 面向对象
面向过程:
面向对象:
静态方法可以直接调用,如果是非静态方法需要先实例化(new)才可以调用。
构造器功能:
1、使用new关键字,本质是调用构造器。
2、初始化对象的值。
注意:
- 如果自己定义了有参构造,无参构造必须显示定义。
- 一个类即使什么都不写,也会存在一个方法(无参构造器)。
- 生成构造器快捷键 Alt+Insert。
IDEA中out文件可以查看class文件,如果没有去项目结构里面添加。
创建对象的内存分析:
二、封装、继承、多态
封装的作用:
- 提高程序的安全性,保护数据
- 隐藏代码的实现细节
- 统一接口
- 系统可维护增加
在Java中所有的类都直接或者间接继承Object。
私有的东西无法被继承。
super注意:
1、super调用父类的构造方法,必须在构造方法的第一个。
2、super必须只能出现在子类的方法或者构造方法中。
3、super和this不能同时调用构造方法。
super 和 this 对比:
代表的对象不同:
this:本身调用者这个对象
super:代表父类对象的应用
前提:
this:没有继承也可以使用
super:只能在继承条件下才可以使用
构造方法:
this();本类的构造
super();父类的构造
重写:需要有继承关系,子类重写父类的方法!
1、方法名必须相同
2、参数列表必须相同
3、修饰符:范围可以扩大但是不可以缩小; public>protected>default>private.
4、抛出的异常:范围可以被缩小但是不能扩大; ClassNotException --> Exception(大)
重写:子类的方法和父类必须一致,方法体不同。
为什么需要重写?父类的功能,子类不一定需要或者不一定满足。
多态注意事项:
1、多态是方法的多态,属性没有多态
2、父类和子类,有l联系 类型转换异常
3、存在条件:继承关系,方法需要重写,父类引用指向子类对象 Father f1 = new Son()
instanceof 和 类型转换
System.out.println( X instanceof Y);// 如果X的范围大于Y的范围则结果是true
// 类型转换
// 高 低
Person obj = new Student();
// student将这个对象转换为Student类型,我们就可以使用Student类型的方法了
((Student) obj).go();
// 子类转换成父类可能会丢失一些自己的方法
类型转换注意事项:
1、父类引用指向子类的对象
2、把子类转换成父类,向上转换,可能会丢失一些自己的方法
3、把父类转换成子类,向下转换,强制转换,
4、方便方法的调用,减少重复代码
static关键字
statis修饰符修饰的对象,在程序加载时就已经开辟空间,不用再new可以直接使用。
抽象类注意事项:
1、不能new这个抽象类,只能靠子类去实现它;约束!
2、抽象类中可以写普通方法
3、抽象方法必须在抽象类中
接口的作用:
1、约束
2、定义一些方法,让不同的人去实现
3、接口(一般是XXServices)中的所有定义的方法都是抽象的 public abstract。
4、常量一般被 public static final 修饰
5、接口不能被实例化,接口中没有构造方法
6、implements可以实现多个接口
7、实现类(一般是XXServicesImpl)必须重写接口中所有的方法。
例子:
注意:一个类里面可以有多个类,但是只能有一个public类。
三、异常机制
异常处理机制
抛出异常
捕获异常
异常处理的五个关键字:
try(监控区域) 、catch(捕获异常类型)、finally(一定会被执行)、throw(自动抛出异,一般在方法中使用常)、throws (在方法上使用)
异常处理快捷键:Ctrl Alt + t
自定义异常例子: