几个有关面向对象的知识点

77 阅读2分钟

一.关于继承与多态的一些思考

子类通过继承会获得父类所有的属性和方法 包括私有的属性和方法

但是只是拥有 却无法访问 因为私有就意味着只有对象自己才能够访问到

多态指的是 引用类型对象调用的方法 只有程序运行期间才能知道到底是调用哪个类的哪个对象的方法

如果子类重写了父类方法 实际上会调用子类重写的方法 如果子类没有重写那就调用父类的

同一个父类不同的子类 对于同一个方法可能呈现出不同的行为 这就是多态

二.抽象类与接口

相同点:

1.都不能直接通过new来创建

2.都可以包含抽象方法

3.都可以提供默认实现方法(Java8之后可以通过default关键字对接口提供默认实现)

不同点:

1.抽象类中可以有非抽象的方法 而接口中不能

2.抽象类本质上还是类 类就只能单继承 而接口可以多实现

3.接口是用来约束行为 实现接口意味着具备某个行为的能力 抽象类更多强调的是所属关系 更多的是强调继承 通过继承获得某些能力

最常用的还是模板方法模式中 我们一般会把模板方法定义在抽象类中 把不确定的行为抽象成方法 让子类去实现

4.接口中的成员必须是public static final修饰的 并且是必须被初始化值 不能够被子类修改

抽象类中的成员默认是default的 可以在子类中重新定义和重新赋值

三.深拷贝 浅拷贝与引用拷贝

引用拷贝 不会创建新的对象 只是把对象的引用地址复制一份

浅拷贝 如果原对象含有引用类型的属性 只会把被引用类型属性的引用地址复制一份

深拷贝顾名思义 更加深层次的拷贝 完整拷贝整个对象 会将被拷贝对象中的引用类型的属性也创建一份

图解如下: