面向对象细节总结

Posted 名字真的很急用

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象细节总结相关的知识,希望对你有一定的参考价值。

封装的好处:
通过方法来控制成员变量,提供了代码的安全性
把代码用方法进行封装,提供了代码的复用性

成员变量: 在堆区

构造方法不能被继承:不能,因为如果子类继承了父类的构造方法,父类的构造在子类中不符合构造方法的规则,也不符合一般方法的规则。
父类的构造在子类中没有返回类型,方法名也与子类的类名不相同。不符合java语法规范。

为什么方法中不能定义static变量,main方法也不行?
静态变量的本意是为了让所有的对象共享这个变量,如果在方法里面定义静态变量的话就存在逻辑错误了,也达不到你想要目的.
因为在方法定义静态变量根本没有他的任何意义. 任何对象都有自己的方法,即使是静态方法,方法内的变量也是在方法调用时候才开始分配内存,
所以想给成静态的在逻辑上存在问题。
或者说是gc垃圾回收机制的问题,一旦方法中定义static,当回收的时候无法回收,

重写(override)方法原则:
子类的方法的名称必须和所覆盖的方法相同
子类的方法的参数必须和所覆盖的方法相同
子类的返回类型必须和所覆盖的方法相同 (除过子类中方法的返回类型是父类中返回类型的子类)
子类抛出异常小于等于父类方法抛出异常
子类访问权限大于等于父类方法访问权限

重载(overload)方法原则:
方法名必须相同
方法的参数列表不相同(包括参数类型,参数个数,参数顺序)
方法的返回类型和方法的修饰符可以不相同

总结:方法重载的返回值类型可以不相同,方法重写的返回类型必须相同,否则编译报错。

继承的好处:
提高了代码的复用性
提高了代码的维护性(如果代码需要修改,修改一处即可)
继承的弊端:
继承让类与类之间产生了关系,类的耦合性增强了,当父类发 生了变换时子类实现也不得不跟着变化,削弱了子类的独立性。

继承中变量的访问特点:在子类方法中访问一个变量
1.子类局部范围找
2.子类成员范围找
3.父类成员范围找
4.如果没有就报错(不考虑父类的父类)
规则:子类中所有的构造方法默认都会先访问父类中的无参构造方法。
为什么呢?

因为子类会继承父类中的数据,可能还会使用父类的数据,所以,子类初始化之前,一定要先完成父类数据的初始化
每一个子类构造方法的第一句默认都是super()

继承中成员方法的访问特点:
通过子类对象访问一个方法
1.子类成员范围找
2.父类成员范围找
3.如果没有就报错(不考虑父类的父类)

@Override 注解可以检测方法重写的正确性。

java中支持多层继承!

状态修饰符:
1.final(最终态):可以修饰成员方法,成员变量,类。
修饰方法:表明该方法是最终方法,不能被重写
修饰变量:表明该变量是常量,不能再次赋值
修饰类:表明该类是最终类,不能被继承

final修饰局部变量
变量是基本类型:final修饰的是基本类型的数据值不能发生改变
变量是引用类型:final修饰的是引用类型的地址值不能发生改变,但地址里面的内容可以发生改变

2.static(静态)
被类的所有对象共享
可以通过类名调用
静态成员方法只能访问静态成员

多态:同一对象,在不同时刻表现出来的不同形态。
前提:1.有继承或者实现关系
2.有方法重写
3.有父类引用指向子类对象

抽象类的成员的构造方法的作用是什么?
用于子类访问父类数据的初始化。

接口的实现类:要么重写接口中的所有抽象方法,要么是抽象类
接口如何实例化呢? 参照多态的方式,通过实现类对象实例化,这叫接口多态。
接口为什么没有构造方法?
因为一个类如果没有父类,默认继承Object里面的构造方法。

接口和接口之间可以多继承关系。

抽象类是对事物的抽象,而接口是对行为的抽象、

以上是关于面向对象细节总结的主要内容,如果未能解决你的问题,请参考以下文章

面向对象细节总结

面向对象的总结

面向对象三大特性总结

python面向对象总结!

第三章 面向对象总结

8面向对象设计模式六大原则总结