面试:谈谈你对面向对象的理解?
面向对象通俗来讲就是没有对象我就不编程,要找到对象才能编程。
对象和类是面向对象的组成单元。
那么什么是类呢?
类是相同属性和共同行为对象的集合
是JAVA当中最小的工作单元 是一个模板。
类中有什么属性和行为要根据业务逻辑来确定。
什么是对象呢?
对象是类的实例,是类的具体化。 类只有通过对象才可以使用,而在开发之中应该先产生类, 之后再产生对象。类不能直接使用,对象是可以直接使用的。
类中的构造方法是什么,有什么特征?有以下几个特点
* 能够实例化类的对象,用于初始化 * 方法名与类名相同,没有返回类型 * 可以有参数可以有无参 * 如果不写,则JVM会提供一个默认的无参构造方法 * 如果写了,则默认不存在的 * 它是自动调用的
面向对象有四大特征,分别是抽象、继承、封装、多态。
- 抽象: 提取事物的本质属性和行为的过程
- 封装: 是指隐藏对象的属性和实现细节,对外提供公共访问方式(接口),将变化隔离,便于使用提高安全性
例如一个日期类,我们将日期的数据和操作放在一个类中,我们知道日期的格式是有严格限制的,构造一个日期类对象必须通过自定义构造函数来完成,我们对日期的操作只能根据类里面提供的接口,不是说可以随意的进行加减乘除操作。
- 继承: 是快速构建类的一种方式,目的是构建出比父类更加优秀和强大的子类 。
继承中涉及的相关概念:
1:重写
2:super关键字
3:子类的初始化过程干了什么?
4:向上转型
5:多态
例如,我们封装一个动物类,当我们想实现一个鸟类的类时,就可以采用继承的思想,鸟类动物是一类动物,动物所具有的特性鸟类动物都具有,就可以用动物类派生出鸟类,当我们想要实现一个更具体的麻雀的类时,麻雀是一种鸟,这一点毋庸置疑,就可以用鸟类派生出麻雀类。
多态: 同一个引用类型(操作),使用不同的实例(new)而执行不同操作 多态的条件:子父类继承,向上转型
例如,我们实现一个平面图形的类,而又派生出矩形和圆形两个类,对于众多平面图形我们都免不了要对其进行求面积和周长的操作,并且求周长和面积的方法不同。为了通用性,我们在父类中定义求周长和面积的接口(建议纯虚函数),通过在各个子类中重定义这两个接口实现各自的求周长和求面积的操作。父类就可以通过相同的方式来调用不同子类的周长和面积的操作。
多态实现的必要条件:
有子父类继承关系 有向上转型 方法的参数使用父类、接口、抽象类 方法的返回类型使用父类、接口、抽象类 编译时多态:具体体现在方法的重载 运行时多态:具体体现在方法的重写
接口抽象类的区别
接口:interface 是定义规则和契约 是对类的进一步高级抽象和分类 它侧重于功能的扩展 它实现的是共性中的个性 接口可以变相的实现多继承 实现了接口的子类必须要强制重写接口中的抽象方法 抽象类:abstract class 是对无法描述清楚的对象的行为的抽象 它侧重于继承 它提取是子类的共性 继承了抽象类的子类必须要强制重写抽象父类中的抽象方法
静态变量与非静态变量的区别
类变量: 整个类中所有的对象共享,所有对象都可以修改
注意:实际工作中使用static变量的原则:
* 第一:static的好处是所有对象共享 * 第二:释放内存的时候最晚 * 第三:不常用
区别:
第一: 局部变量声明在方法、构造方法或者语句块中; 第二:局部变量在方法、构造方法、或者语句块被执行的时候创建, 当它们执行完成后,变量将会被销毁; 第三:访问修饰符不能用于局部变量; 第四:局部变量只在声明它的方法、构造方法或者语句块中可见; 第五:局部变量是在栈上分配的。 第六:局部变量没有默认值,所以局部变量被声明后,必须经过初始化, 才可以使用。
那么JAVA的初始化过程是怎样的呢?
可以看下面这张图
对于静态变量、静态初始化块、变量、初始化块、构造器,它们的初始化顺序依次是(静态变量、静态初始化块)>(变量、初始化块)>构造器。
JAVA中还有final修饰符,它有哪些特点呢?
final修饰符的作用 1、如果修饰一个类,则此类不允许继承 2、JDK当中的final类: 八种基本数据类型的包装类 String Math 3、如果修饰一个方法,则此方法不允许重写 4、如果修饰一个变量,则此变量是常量
JAVA还有四种修饰符,它们的区别是什么呢?
private int x;私有的离开本类则不可见
protected int xx;必须是不同包中的子类才可见
int xxx;离开本包则不可见
public int xxxx;走遍天下都可见
- 面试总结之谈谈你对面向对象的理解
- 面试总结之谈谈你对面向对象的理解
- Web前端面试指导(三十三):谈谈你对模块化开发的理解?
- Android面试之---谈谈你对Android NDK的理解
- 谈谈你对面向对象的理解?
- Android面试之---谈谈你对Android NDK的理解
- 面向对象思想--谈谈你对面向对象的理解
- Android面试之---谈谈你对Android NDK的理解.
- 面试题-谈谈对面向对象的理解
- 谈谈我对php中面向对象的理解
- 谈谈你对面向对象的理解
- Android面试之---谈谈你对Android NDK的理解.
- linux面试之-谈谈你理解的堆和栈
- 面试系列----谈谈你对android多线程的理解
- 谈谈我对php中面向对象的理解
- 面试——谈谈你对Java 平台的理解
- 大白话聊聊Java并发面试问题之谈谈你对AQS的理解?
- Android面试之---谈谈你对Android NDK的理解.
- 谈谈自己对面向对象的理解
- 面试之谈谈你对Spring的理解