面试-面向对象

一:构造函数和一般函数区别:

1.
构造函数:对象创建时,就会调用与之对应的构造函数,对对象进行初始化。
一般函数:对象创建后,需要函数功能时才调用。
2.
构造函数:对象创建时,会调用只调用一次。
一般函数:对象创建后,可以被调用多次。

3.细节:
1,构造函数如果完成了set功能。set方法是否需要。
2,一般函数不能直接调用构造函数。
3,构造函数如果前面加了void就变成了一般函数。
4,构造函数中是有return语句的。

二:代码块。

1,局部代码快。方法内 {}
对局部变量的生命周期进行控制。
2,构造代码块。类内 {}
对所有对象进行初始化。
3,静态代码块。类内 static{}
对类进行初始化。

三:this和super

1.this 当前对象的引用,this()只能定义在本类构造函数第一行(可以解决成员变量和局部变量的重名问题,可以用于比较是否同一对象)
2.super 父类对象的引用,super()只能定义在子类构造函数第一行
3.this()和super()不能重复出现在子类构造方法中

四:static特点:

1.随着类的加载而加载
2.优先于对象存在
3.被所有对象共享
4.可以直接被类名调用(类名.方法/属性)类变量:静态变量,实例变量:成员变量,局部变量

五:方法重载和重写区别

重载,overload,同一个类,方法签名不同(方法名相同,参数类型或者个数不同),与返回类型无关
重写,override,父子两类,方法签名一致,权限子类>=父类,父类私有方法不能重写,静态只能覆盖静态,或者被静态覆盖,重写又称为覆盖

六:开闭原则

对扩展开放,对修改关闭

七:final特点

1,final是一个修饰符,可以修饰类,方法,变量。
2,final修饰的类不可以被继承。所以不能和abstract同时出现
3,final修饰的方法不可以被覆盖。
4,final修饰的变量是一个常量,只能赋值一次。
为什么要用final修饰变量。其实在程序如果一个数据是固定的,
那么直接使用这个数据就可以了,但是这样阅读性差,所以它该数据起个名称。
而且这个变量名称的值不能变化,所以加上final固定。

写法规范:常量所有字母都大写,多个单词,中间用_连接。

八:抽象类和接口的异同点

单继承,abstract,extends
多实现,interface,implements

特点:
抽象类:声明方法的存在而不去实现它的类叫抽象类,
不能创建abstract的实例,但可以创建一个变量,类型为抽象类,并让它指向具体子类的一个实例
可以没有抽象方法,但有构造函数,可以用于子类初始化
为了不让别人去创建对象,如AWT的适配器对象
抽象关键字不可以和那些关键字共存?private,static,final

接口:是抽象类的变体。
成员变量:public static final 修饰的静态常量,
成员函数:public abstract 所有方法都抽象,用A instanceof B来查看A 是否是 B的父类/接口

相同点:
都是不断向上抽取而来的。

不同点:
1,抽象类需要被继承,而且只能单继承。
接口需要被实现,而且可以多实现。
2,抽象类中可以定义抽象方法和非抽象方法,子类继承后,可以直接使用非抽象方法。
接口中只能定义抽象方法,必须由子类去实现。
3,抽象类的继承,是is a关系,在定义该体系的基本共性内容。
接口的实现是 like a 关系,在定义体系额外功能。

九:面向对象的特性:

1.抽象 abstract 抽象关键字不可以和那些关键字共存?private,static,final
特点:笼统,模糊,看不懂!不具体,一种过程,在这个过程中,隐藏了实现细节;
好处:给第三个特征多态提供了前提
2.封装 private
特点:隐藏对象的属性和实现的细节,提供公共的访问方式(private 属性,提供public方法给外部使用)
好处:安全性提高,复用性提高,隔离性提高,使用性方便
3.继承 extends,absturts,
特点:是一种联结类的层次模型,类的重用来表述共性的方法
好处:1,复用性提高。2,让类与类之间产生了关系,给第三个特征多态提供了前提.
继承弊端:打破了封装性
4.多态 前提:继承/实现 方法重写
特点:某一类事物具备的多种表现形态 (参数化多态性,包含多态性)
好处:好处是提高了程序的扩展性,
缺陷是只能使用父类的引用访问父类的方法,无法访问子类的特有方法。需要转型,向下转型(向子类转型)父类instanceof子类

九2:其他

1.接口的特点:
对外暴露规则
程序功能扩展
降低代码耦合性

2.多态时,成员的特点:
(1),成员变量。
编译时:参考引用型变量所属的类中的是否有调用的成员变量,有,编译通过,没有,编译失败。
运行时:参考引用型变量所属的类中的是否有调用的成员变量,并运行该所属类中的成员变量。
简单说:编译和运行都参考等号的左边。哦了。
作为了解。

(2),成员函数(非静态)。
编译时:参考引用型变量所属的类中的是否有调用的函数。有,编译通过,没有,编译失败。
运行时:参考的是对象所属的类中是否有调用的函数。
简单说:编译看左边,运行看右边。

因为成员函数存在覆盖特性。

(3),静态函数。
编译时:参考引用型变量所属的类中的是否有调用的静态方法。
运行时:参考引用型变量所属的类中的是否有调用的静态方法。
简单说,编译和运行都看左边。

其实对于静态方法,是不需要对象的。直接用类名调用即可。

十:内部类(成员内部类、局部内部类、匿名内部类、静态内部类)

内部类访问特点:
1,内部类可以直接访问外部类中的成员。
2,外部类要访问内部类,必须建立内部类的对象。

1.成员内部类
外围类的一个成员,可以无限制的访问外围类的所有 成员属性和方法,尽管是private的,但是外围类要访问内部类的成员属性和方法则需要通过内部类实例来访问。
在成员内部类中要注意两点,第一:成员内部类中不能存在任何static的变量和方法;第二:成员内部类是依附于外围类的,所以只有先创建了外围类才能够创建内部类。
创建 内部类对象:Outer.Inner in = new Outer().new Inner();
2.局部内部类:
方法内,只能在该方法和属性中被使用,出了该方法和属性就会失效。
内部类在局部位置上只能访问局部中被final修饰的局部变量
创建 内部类对象
3.静态内部类
如果内部类中定义了静态成员,该内部类也必须是静态的。
创建 内部类对象:Outer.Inner in = new Outer.Inner();
4.匿名内部类
一个匿名子类对象。
必须有前提:内部类必须继承或者实现一个外部类或者接口。
格式:new 父类or接口(){子类内容}

十一:设计模式

1.单例模式
饿汉式:类加载,对象就已经存在(开发推荐使用)
懒汉式:类加载,没有对象,只有调用getInstance()方法才创建对象,多线程存在安全性(常面试,存在多线程安全问题)

设计模式:对问题行之有效的解决方式。其实它是一种思想。
解决的问题:就是可以保证一个类在内存中的对象唯一性。

必须对于多个程序使用同一个配置信息对象时,就需要保证该对象的唯一性。

如何保证对象唯一性呢?
1,不允许其他程序用new创建该类对象。
2,在该类创建一个本类实例。
3,对外提供一个方法让其他程序可以获取该对象。

步骤:
1,私有化该类构造函数。
2,通过new在本类中创建一个本类对象。
3,定义一个公有的方法,将创建的对象返回。
//饿汉式
class Single//类一加载,对象就已经存在了。
{
  private static Single s = new Single();
  private Single(){}
  public static Single getInstance()
  {
    return s;
  }
}

//懒汉式
class Single2//类加载进来,没有对象,只有调用了getInstance方法时,才会创建对象。
//延迟加载形式。
{
  private static Single2 s = null;
  private Single2(){}
  public static Single2 getInstance()
  {
    if(s==null)
      s = new Single2();
      return s;
    }

  }
}

十二:一个对象实例化过程:

Person p = new Person();
1,JVM会读取指定的路径下的Person.class文件,并加载进内存,
并会先加载Person的父类(如果有直接的父类的情况下).
2,在堆内存中的开辟空间,分配地址。
3,并在对象空间中,对对象中的属性进行默认初始化。
4,调用对应的构造函数进行初始化。
5,在构造函数中,第一行会先到调用父类中构造函数进行初始化。
6,父类初始化完毕后,在对子类的属性进行显示初始化。
7,在进行子类构造函数的特定初始化。
8,初始化完毕后,将地址值赋值给引用变量.

十二2:类构造函数中运行顺序:

子类构造方法开始
fu类构造方法super();
显示初始化
构造代码块初始化
子类构造方法结束

原文地址:https://www.cnblogs.com/yueluoshuxiang/p/11367119.html

时间: 2024-10-18 16:45:29

面试-面向对象的相关文章

c++ 面试 面向对象

参考 :http://www.cnblogs.com/iuices/archive/2011/11/04/2236611.html 1 C++中空类默认产生哪些类成员函数? 答案: 对于一个空类,编译器默认产生4个成员函数: (1)默认构造函数 (2)析构函数 (3)拷贝构造函数 (4)赋值函数 http://naotu.baidu.com/viewshare.html?shareId=ax9gzf7oqocs c++ 面试 面向对象

js面向对象面试资料

js面向对象面试资料 1 说说你对闭包的理解 使用闭包主要是为了设计私有的方法和变量.闭包的优点是可以避免全局变量的污染,缺点是闭包会常驻内存,会增大内存使用量,使用不当很容易造成内存泄露. 闭包有三个特性: 1.函数嵌套函数 2.函数内部可以引用外部的参数和变量 3.参数和变量不会被垃圾回收机制回收 2.call() 和 .apply() 的区别和作用? 作用:动态改变某个类的某个方法的运行环境. 1.call,apply都属于Function.prototype的一个方法,它是JavaScr

python面向对象面试集锦(1-23)

目录 1.简述面向对象三大特性 2.什么是鸭子类型? 3.super作用? 4.mro是什么? 5.什么是C3算法? 6.列举面向对象中带双下线的特殊方法? 7.单下划线与双下划线的作用? 8.实例变量和类变量的区别? 9.静态方法和类方法区别? 10.isinstance.issubclass和type的作用? 11.有用过with statement(语句)吗?它的好处是什么? 12.不可迭代的数据类型和可迭代的数据类型? 13.单例模式?singleton 14.python中如何判断一个

面向对象 C++ 面试

面向对象:抽象.封装,继承,多态 抽象:是对具体问题进行概括,抽象出一类对象的公共性质并加以描述的过程. 封装:将抽象得到的数据和行为相结合,形成一个有机的整体,也就是将数据和操作数据的函数代码进行有机的结合,形成类.隐藏实现细节,使代码模块化     (代码重用) 继承:子类继承所有基类的成员,并扩展已存在的类             (代码重用) 继承类的类对象执行顺序 在多继承方式下,派生类的构造函数和析构函数调用顺序是怎么样的? 1.若类有直接或间接虚基类,先执行虚基类的构造函数: 2.

java面试准备之面向对象

面向对象 下面列出了面向对象软件开发的优点: (1) 代码开发模块化,更易维护和修改. (2) 代码复用. (3) 增强代码的可靠性和灵活性. (4) 增加代码的可理解性. 面向对象编程有很多重要的特性,比如:封装,继承,多态和抽象 Java面向对象的三个特征与含义 一.继承: 1.概念:继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力 2.好处:提高代码的复用,缩短开发周期. 二.多态: 1.概念:多态(Polymorphism)按字面的意思就是"多种状态,

面试总结之谈谈你对面向对象的理解

对面向对象的理解 在我理解,面向对象是向现实世界模型的自然延伸,这是一种“万物皆对象”的编程思想.在现实生活中的任何物体都可以归为一类事物,而每一个个体都是一类事物的实例.面向对象的编程是以对象为中心,以消息为驱动,所以程序=对象+消息. 面向对象有三大特性,封装.继承和多态. 封装就是将一类事物的属性和行为抽象成一个类,使其属性私有化,行为公开化,提高了数据的隐秘性的同时,使代码模块化.这样做使得代码的复用性更高. 继承则是进一步将一类事物共有的属性和行为抽象成一个父类,而每一个子类是一个特殊

Web前端面试(五):面向对象

类与实例 类与继承:如何实现继承,继承的几种方式 第一种:借助构造函数实现继承 function Parent1(){   this.name = 'parent1'; } function child1(){    Parent1.call(this); //这句话是执行父级的构造函数,也可以用apply,改变函数运行的上下文   this.type = 'child1'; } new Child1();  缺点:Parent1的prototype上面的属性或者方法是不能被Chlid1继承的,

Java面向对象面试案例

前端面试知识点梳理之五——javascript面向对象

一.相关问题 1.创建对象有几种方法 2.原型,构造函数,实例,原型链 3.instanceof的原理 4.new运算符 二.问题解答 1.创建对象有几种方法 原文地址:https://www.cnblogs.com/bobodeboke/p/8449802.html