栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java基础知识面试题之面向对象技术

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java基础知识面试题之面向对象技术

文章目录

二.面向对象技术

2.1面向对象和面向过程有什么区别2.2 面向对象有哪些特征2.3 面向对象的开发方式有什么优点2.4 什么是继承2.5 组合和继承有什么区别2.6 多态的实现机制是什么2.7 重载和覆盖有什么区别2.8 抽象类与接口有什么异同2.9 如何获取父类的类名2.10 this和super有什么区别

二.面向对象技术 2.1面向对象和面向过程有什么区别

面向对象的方法更符合常规思维来处理客观世界的问题,强调把问题域的要领映射到对象和对象之间的接口上,二面向过程的方法强调过程的抽象化和模块化,是以过程为中心构造或处理客观世界的问题。 2.2 面向对象有哪些特征

封装:封装是指将客观事物抽象成类,每个类对自身的数据和方法进行保护,通过修饰符来选择哪些数据和方法可以访问,哪些不可以访问,如果可以访问,可以被谁访问。继承:一个类可以继承别的类,继承者称为子类,被继承者称为父类,子类可以继承父类的成员变量和方法,显现代码的复用,同时继承也为多态提供了前提条件,是程序可以更加灵活多态:父类引用指向子类实例,使得语言更加灵活,抽象,行为共享,代码共享 2.3 面向对象的开发方式有什么优点

有较高的开发效率,因为面向对象的开发方式比较接近正常的思维逻辑,可以把现实的事物直接映射为开发的对象有较好的软件鲁棒性(在异常和危险情况下系统生存的能力),因为面向对象开发有很高的重用性,可以重用已有的且在相关领域经过长时间测试的代码有较高的可维护性,面向对象的开发方法有很好的可读性,因此维护起来更加方便 2.4 什么是继承

继承是面向对象的一个重要特性,可是提高代码的重用性,提高开发效率,被继承者为父类,继承者为子类继承的几个特性

java不支持多继承,一个子类只能由一个父类子类只能继承父类的非私有成员变量和方法子类的成员变量跟父类的成员变量重名时,子类的成员变量会覆盖父类的成员变量子类的方法跟父类方法重名(方法名一样,参数类型,次序,个数一样)时,也会覆盖父类的方法 2.5 组合和继承有什么区别

继承跟组合都能实现代码的复用,继承是允许在一个类的基础上,保留其原来的特性,创建一个新的类,在原来类的基础上进行扩展;组合是在一个类中创建别的类;继承是is -a的关系,组合是has - a的关系选择组合跟继承的原则

除非是确定is - a的关系,否则不要轻易使用继承,过多的继承会破坏代码的可维护性,但父类被修改时,会影响到其子类,增加程序的维护成本不要仅仅为了多态去继承,可以用组合跟接口的方式实现,这样会比继承有更好的可扩展性 2.6 多态的实现机制是什么

多态的机制时父类引用指向子类实例,即在编译的时候认为其是父类对象,运行时实则是子类对象,调用的方法也是子类中的方法,这种方法绑定也称动态绑定或是晚绑定。只有方法有多态的特性,成员变量没有java提供了哪两种用于多态的机制

编译时多态和运行时多态,编译时多态是通过方法的重载实现的,运行时多态是通过方法的覆盖实现的 2.7 重载和覆盖有什么区别

覆盖跟重载是java多态性的不同表现形式重载注意点:

判断是否重载是通过参数列表(类型,个数,次序)决定的对于声明成private的方法,其子类的同名方法就不能称为是重载,只能说是一个新方法 覆盖注意点:

父类和子类的方法同名同参才可称之为覆盖父类子类的返回值类型相同父类子类抛出的异常类型相同父类中声明成private的方法,不能进行覆盖,只能说是一个新的方法 覆盖和重载的区别

覆盖是子类跟父类之间的关系,属于垂直关系,重载是一个类内部的关系,属于水平关系覆盖是一个方法针对一个方法产生的关系,属于一对一的,重载是多个方法之间的关系覆盖要求参数列表相同,重载要求参数列表不同 2.8 抽象类与接口有什么异同

抽象类

含抽象方法的类为抽象类抽象类不能实例化,但可以创建一个对象指向子类实例抽象类中也可以包含具体的实现方法继承了抽象类的子类必须实现所有的抽象方法,否则还是一个抽象类继承了抽象类的子类,实现抽象方法时,必须包含相同或者更低的访问级别 接口

接口是常量和抽象类的集合,可看作一种特殊的抽象类(1.8之后接口中也可以有普通方法)接口不能实例化,但仍有多态性的特点一个类可以实现多个接口接口中的成员变量默认是public static final类型的,且必须是static final类型的,且必须初始化,方法必须是public abstract的 接口和抽象类的异同

同:

都不能实例化 不同:

抽象类只能单继承,接口可多实现 2.9 如何获取父类的类名

不能直接使用super.getClass().getName()

getClass()方法继承自Object类,是被定义为final和native的,不能覆盖,且该方法返回的是当前的运行时类,所以获取的还是当前类而不是父类 使用this.getClass().getSuperclass().getName(),是利用的反射机制 2.10 this和super有什么区别

this指向当前实例,用来区分成员变量和形参的super可以用来访问父类的方法或成员变量,当子类和父类拥有相同名字的成员变量时,可以使用super访问父类的成员变量,用super调用构造器时需放第一行。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/748989.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号