软件开发|编程技术|编程代码|编程入门先学什么—程序设计语言

Java面试:面向对象Java技术



  面向对象的基本概念


  对象和类的概念


  对象:是把数据和数据操作方法放在一起,作为一个相互依存的整体,即对象


  类:对同类对象抽象出其共性,即类,类中的大多数方法只能被本类的方法进行处理,类通过一个简单的外部接口与外界发生联系,对象与对象之间通过消息进行通信


  所以我们是在面向对象进行编程,面向一个抽象的实体进行编程。


  面向对象和面向过程的区别


  面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。


  面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。


  面向对象的优点


  1,较高的开发效率


  2,较高的扩展性和代码可重用性


  3,保证软件的高可维护性


  面向对象的特征


  抽象


  抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。


  继承:


  继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。


  封装


  封装是客观事物抽象成类,每个类对自身的数据和方法进行保护,类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。


  多态性


  多态性是指允许不同类的对象对同一消息作出响应。比如同样的加法,把两个时间加在一起和把两个整数加在一起肯定完全不同。又比如,同样的选择编辑-粘贴操作,在字处理程序和绘图程序中有不同的效果。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。


  面向对象的六大原则


  单一职责原则(迪米特法则)(Single-Resposibility Principle):一个类,最好只做一件事,只有一个引起它的变化。单一职责原则可以看做是低耦合、高内聚在面向对象原则上的引申,将职责定义为引起变化的原因,以提高内聚性来减少引起变化的原因。


  开放封闭原则(Open-Closed principle):软件实体应该是可扩展的,而不可修改的。也就是,对扩展开放,对修改封闭的。


  Liskov替换原则(Liskov-Substituion Principle):子类必须能够替换其基类。这一思想体现为对继承机制的约束规范,只有子类能够替换基类时,才能保证系统在运行期内识别子类,这是保证继承复用的基础。


  依赖倒置原则(Dependecy-Inversion Principle):依赖于抽象。具体而言就是高层模块不依赖于底层模块,二者都同依赖于抽象;抽象不依赖于具体,具体依赖于抽象。


  接口隔离原则(Interface-Segregation Principle):使用多个小的专门的接口,而不要使用一个大的总接口


  合成复用原则(Composite Reuse Principle)是尽量使用合成/聚合的方式,而不是使用继承。


  抽象类和接口


  这两种方式实现了以上面向对象特性里的继承和抽象


  抽象类


  抽象类的特性如下


  抽象类中可以构造方法


  抽象类中可以存在普通属性,方法,静态属性和方法。


  抽象类中可以存在抽象方法。


  如果一个类中有一个抽象方法,那么当前类一定是抽象类;抽象类中不一定有抽象方法。


  抽象类中的抽象方法,需要有子类实现,如果子类不实现,则子类也需要定义为抽象的。


  抽象类不能被实例化,抽象类和抽象方法必须被abstract修饰(其实这就是抽象类和普通类的区别,其它和普通类都差不多)


  java1.8实测,抽象类中的抽象方法和非抽象方法在不加修饰符的情况下,都是默认的default


  接口


  接口的一些使用特性


  在接口中只有方法的声明,没有方法体。


  接口体只能用 public 和 abstract 修饰。only public & abstract are permitted 。


  在接口中只有常量,因为定义的变量,在编译的时候都会默认加上public static final


  在接口中的方法,永远都被public来修饰,不加修饰符,默认也是public。 。


  接口中没有构造方法,也不能实例化接口的对象。(所以接口不能继承类)


  接口可以实现多继承,接口可以继承接口,用extends


  接口中定义的方法都需要有实现类来实现,如果实现类不能实现接口中的所有方法则实现类定义为抽象类。


  注意:接口是一种特殊的抽象类


  抽象类与接口的异同


  相同点


  1,相同点是接口和抽象类都不能实例化


  2,接口的实现类或抽象类的子类实现了接口或抽象类中的方法后才能实例化。


  不同点


  1,首先类可以实现多个接口,但只能继承一个抽象类(从继承角度)


  2,接口体只能用 public 和 abstract 修饰,而抽象类的类访问修饰符除了(和abstract不搭的关键字列表系列)final,abstract,private,static,synchorized,native之外基本都可以(从类的修饰符角度)


  3,抽象类可以有普通的成员变量,静态变量。而接口的变量默认为public static final,只能有静态的不可修改的变量,而且必须赋初值(从变量角度)


  4,接口里的方法只能用public修饰,而抽象类的方法可以用除了(和abstract不搭的关键字列表系列)final,abstract,private,static,synchorized,native的方法修饰符。并且接口只有未实现方法,但抽象类可以有普通方法(从方法角度)


  5,接口不能由构造函数,抽象类可以有构造函数。(从构造函数角度)


  重写和重载


  多态有两种实现方式,重载(编译期多态)和重写(运行期多态)


  重载(静态多分派)


  1、在同一个类中 。 2、方法名相同。3、方法的形参列表不同,具体的不同表现为: 类型、个数、顺序的不同才可以构成重载。4、与方法的返回值类型与访问权限或是抛出异常无关


  注意:java中可以有多个重载的main方法,只有public static void main(String[] args){}是函数入口


  重写(动态单分派)


  重写是子类实现父类的方法


  在子类中可以根据需要对从基类中继承来的方法进行重写。


  重写的方法和被重写的方法必须具有相同方法名称、参数列表和返回类型。


  重写方法不能使用比被重写的方法更严格的访问权限。


  子类方法抛出的异常必须和父类方法抛出的异常相同,或者是父类方法抛出的异常类的子类。


  父类的静态方法是不能被子类覆盖为非静态方法。父类的非静态方法不能被子类覆盖为静态方法。


  子类可以定义与父类的静态方法同名的静态方法,以便在子类中隐藏父类的静态方法。区别:运行时,JVM把静态方法和所属的类绑定,而把实例方法和所属的实例绑定。子类定义与父类同名的静态方法但不是覆盖父类的方法


  Justfuck j = new B(); //j是父类引用,B()是子类对象,A()是静态方法。j.A();最后打印出的还是base,即父类的输出结果


  父类的私有方法不能被覆盖


  父类的非抽象方法可以被覆盖为抽象方法


  子类可以重写父类的同步方法。如果父类中的某个方法使用了 synchronized关键字,而子类中也覆盖了这个方法,默认情况下子类中的这个方法并不是同步的,必须显示的在子类的这个方法中加上 synchronized关键字才可。当然,也可以在子类中调用父类中相应的方法,这样虽然子类中的方法并不是同步的,但子类调用了父类中的同步方法,也就相当子类方法也同步了


  总的来说:方法的重写(override)三同一小一大原则:


  方法名相同,参数类型相同,参数列表相同


  子类抛出异常小于等于父类方法抛出异常,


  子类访问权限大于等于父类方法访问权限。


  重载和重写的区别


  重载是同一个类中方法之间的关系,重写是子类和父类之间的关系


  重写只能由一个方法或只能由一对方法产生关系,重载可以是多个方法之间的关系


  重写要求参数列表相同,重载要求不同,重写要求返回值相同,重载不要求



以上就是小编介绍的“Java面试:面向对象Java技术”的内容,希望对大家有帮助,如有疑问,请在线咨询,有专业老师随时为你服务。


相关推荐


最新最全java面试题及答案(初级到高级)


史上最全的中高级JAVA工程师面试题及答案汇总


Java高级开发工程师面试题


2019史上最全java面试题题库大全800题


哪有资深java工程师面试题


上一篇:Javaweb软件项目太难怎么办?实战培训教程
下一篇:Java架构师必知课程,快来看看吧