面向对象编程
说到面向对象,首先应该了解几个名词:类、对象、方法和属性。
- 类是一组相关的属性和行为的集合
- 对象是一类事物的具体体现,对象是类的实例
- 方法是一个事物的行为
- 属性是一个事物的特征信息
1. 封装
将类的某些信息隐藏在类的内部,不允许外部程序直接访问。只能通过该类提供的方法来实现对隐藏信息的操作和访问。
2. 继承
继承是类与类之间的一种关系,是一种“ is a ”的关系。比如狗类继承动物类。
Java中的继承是单继承,即一个类只能有一个父类。
子类拥有父类的所有非private修饰的属性和方法,实现了方法的复用。
2.1 继承的初始化顺序
1. 先初始化父类再初始化子类
2. 先初始化对象的属性,再执行构造方法中的初始化
2.2 final关键字
1. final修饰类,该类不能被继承,如String类
2. final修饰方法,该方法不能被重写
3. final修饰属性,该属性初始化时必须有值或在构造方法中赋值且只能赋值一次
4. final修饰变量,该变量只能赋值一次,即常量
final、finally与finalized区别
finally作为异常处理的一部分,它只能用在try/catch语句中,并且附带一个语句块,表示这段语句最终一定会被执行(不管有没有抛出异常),经常用在需要放在释放资源的情况下。
finalize()是在java.lang.Object里面定义的,也就是说每一个对象都有一个这样的方法。这个方法在gc启动,对象被回收的时候调用。
2.3 方法的重载与重写
-
重载
同一个类中方法名相同,参数列表不同。至于方法的其他部分,如方法返回值类型、修饰符等与重载无关。
-
重写
在子类中创建了一个与父类中名称相同、返回值类型相同、参数列表的方法相同,只是方法体中的实现不同,以实现不同于父类的功能,这种方式被称为方法重写(override),又称为方法覆盖、方法复写。
注意:
父类的成员方法只能被它的子类重写。
声明为 static 的方法不能被重写,但是能够再次声明。
修饰符:范围可以扩大但不能缩小:public>Protected>Default;
3. 多态
对象的多种形态。继承是多态的基础。日常使用举例:引用类型转换、抽象类、接口等
3.1 抽象类和接口的区别
语法层面的区别
- 一个类只能继承一个抽象类,一个类可以实现多个接口
- 抽象类的成员变量可以是各种类型的,接口只能是public static final,且有初始值
- 抽象类可以有非抽象方法,接口不能有非抽象方法
- 接口不能含有静态代码块、静态方法,而抽象类可以
设计层面的区别
- 抽象类是一种对事物的抽象,即对类抽象,而接口是对行为抽象。比如【鸟】和【飞机】这两个类,都有一个【飞】的行为,此时只能设计一个Fly的接口,来实现飞的动作,而不能将【飞】设计成一个抽象类。继承是一个【是不是】的关系,接口实现是一个【有没有】的关系。
- 抽象类作为很多子类的父类,它是一种模板式设计,而接口是一种行为规范,它是一种辐射式设计。比如B、C都继承了A,如果它们的公共部分需要修改,只需要修改A;如果接口里面发生了变化,所有实现此接口的类都必须进行相应的改动。
本文地址:https://blog.csdn.net/yh17388/article/details/110809777