美文网首页
Java面向对象面试题

Java面向对象面试题

作者: 行者和他的钢笔 | 来源:发表于2018-09-18 08:38 被阅读36次

    11、构造器能否被重写?【有问题需要查看相关文档】

    首先,构造器是不能被继承的,因为每个类的类名都不相同,而构造器名称与类名相同,所以根本谈不上继承。
    又由于构造器不能继承,所以就不能被重写。但是,在同一个类中,构造器是可以被重载的。

    1、如何理解面向对象

    (1)首先,要引申出类:类是面向对象中的一个很重要的概念,因为类是很多个具有相同属性和行为特征的对象所抽象出来的,对象是类的一个实例。
    (2)面向对象共有三个特征:封装,继承,多态。

    封装:

    把一些属性和方法封装起来,形成一个类;可以隐藏实现细节。提高了代码的复用性。也提高了安全性。

    封装的意义在于保护或者防止代码(数据)被我们无意中破坏。
    封装的作用:
    1、提高了代码的复用性。
    2、隐藏了实现细节,还要对外提供可以访问的方式。便于调用者的使用。这是核心之一,也可以理解为就是封装的概念。
    3、提高了安全性。

    继承:

    是指在一个现有类的基础上去构建一个新的类,构建出来的新类被称作子类,现有类被称作父类,子类能调用父类的非private修饰的成员,同时还可以自己添加一些新的成员,扩充父类,甚至重写父类已有的方法,使其表现符合子类的特征。

    继承的好处:

    提高了代码的可维护性
    提高了代码的复用性
    让类与类之间产生了继承关系

    继承的弊端:

    类与类之间的耦合度过高

    继承特点:

    java中类只能够单继承,不能多继承,可以多层继承

    封装和继承其实有一个共同的目的就是代码重用。

    多态:

    多态是同一个行为具有多个不同表现形式的能力。多态性是对象多种表现形式的体现
    Java作为面向对象的语言,同样可以描述一个事物的多种形态。
    方法的重载和重写都体现了多态性。
    类中多个方法的重载叫多态,父子类中方法的覆盖也叫多态。

    多态有方法的多态和对象的多态(一个对象多种形态)。

    2、类成员的访问修饰符:

    即类的方法和成员变量的访问控制符,一个类作为整体对象不可见,并不代表他的所有域和方法也对程序其他部分不可见,需要有他们的访问修饰符判断。

    权限如下:


    图片.png

    private表私有
    private修饰的成员只能在当前类中访问,其他类中无法直接访问

    3、this关键字

    (1)解决局部变量和成员变量同名问题

    当在方法中出现了局部变量和成员变量同名的时候,可以在成员变量名前面加上this.来区别成员变量和局部变量
    (2)构造方法之间能不能相互调用

    【this到底代表什么呢?this代表的是对象,具体代表哪个对象呢?哪个对象调用了this所在的方法,this就代表哪个对象。】


    5、抽象类和抽象方法

    抽象类中有抽象方法也有一般方法


    图片.png 图片.png

    抽象方法需要覆盖

    抽象类的特点:
    1,抽象类与抽象方法都必须使用 abstract来修饰
    2,抽象类不能直接创建对象
    3,抽象类中可以有抽象方法,也可以没有抽象方法
    4,抽象类的子类
    a,实现了抽象方法的具体类
    b,抽象类

    抽象类面试题:

    1,抽象类中是否可以没有抽象方法?如果可以,那么,该类还定义成抽象类有意义吗?为什么?
    可以没有抽象方法,有意义,不会让其他人直接创建该类对象

    6、super

    super:用来表示当前对象中包含的父类对象空间的引用
    调用父类的成员变量:
    super.成员变量;

    调用方法的成员方法:
    super.成员方法();

    7、接口

    接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”。
    接口只描述所应该具备的方法,并没有具体实现,

    接口定义时需要使用interface关键字。


    图片.png
    图片.png

    instanceof关键字来判断某个对象是否属于某种数据类型。

    8、Java 中的final关键字有哪些用法?


    9、抽象类(abstract class)和接口(interface)有什么异同?

    10、阐述静态变量和实例变量的区别。

    静态变量也叫类变量,这种变量前加了static修饰符。可以直接用类名调用,也可以用对象调用,而且所有对象的同一个类变量 都是共享同一块内存空间。

    实例变量也叫对象变量,这种变量没有加static修饰符。只能通过对象调用, 而且所有对象的同一个实例变量是共享不同的内存空间的。

    区别在于:

    静态变量是所有对象共有的,某一个对象将它的值改变了,其他对象再去获取它的值,得到的是改变后的值;

    实例变量则是每一个对象私有的,某一个对象将它的值改变了,不影响其他对象取值的结果,其他对象仍会得到实例变量一开始就被赋予的值。

    11、是否可以从一个静态(static)方法内部发出对非静态(non-static)方法的调用?

    不可以。因为非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而static方法调用时不需要创建对象,可以 直接调用。也就是说,当一个static方法被调用时,可能还没有创建任何实例对象,如果从一个static方法中发出对非static方法的调用,那个非static方法是关联到哪个对象上的呢?这个逻辑无法成立,所以,一个static方法内部 发出对非static方法的调用。

    相关文章

      网友评论

          本文标题:Java面向对象面试题

          本文链接:https://www.haomeiwen.com/subject/ozpxmftx.html