您的位置:首页 > 职场人生

面试复习必备之:Java面向对象

2015-12-08 17:09 531 查看


1.什么是面向对象

       从现实世界中客观存在的事物(即对象)出发来构造软件系统,并在系统构造中尽可能运用人类的自然思维方式,
强调直接以问题域(现实世界)中的事物为中心来思考问题,认识问题,并根据这些事物的本质特点,把它们抽象地
表示为系统中的对象,作为系统的基本构成单位(而不是用一些与现实世界中的事物相关比较远,并且没有对应关系
的其它概念来构造系统)。这可以使系统直接地映射问题域,保持问题域中事物及其相互关系的本来面貌。
       面向对象程序设计语言必须有描述对象及其相互之间关系的语言成分。这些程序设计语言可以归纳为以下几类:
系统中一切事物皆为对象;对象是属性及其操作的封装体;对象可按其性质划分为类,对象成为类的实例;实例关系
和继承关系是对象之间的静态关系;消息传递是对象之间动态联系的唯一形式,也是计算的唯一形式;方法是消息的序列

2.

类与对象

A:现实世界的事物

       属性:事物的基本描述  行为:事物的功能

B:Java语言中最基本的单位是类。用类来体现事物

C:类:是一组相关的属性和行为的集合。是一个抽象的概念

           成员变量:事物属性      成员方法:事物行为

D:对象:是该类事物的具体存在,是一个具体的实例

        学生:类    班长:对象

3.三大特性

封装

(1)隐藏实现细节,提供公共的访问方式
(2)好处:
A:隐藏实现细节,提供公共的访问方式
B:提高代码的复用性
C:提高代码的安全性
(3)设计原则
把不想让外界知道的实现细节给隐藏起来,提供公共的访问方式
(4)private是封装的一种体现。

        被private修饰的后的成员只能在本类中被访问
封装:类,方法,private修饰成员变量

              把所有的成员变量给private
 提供对应的getXxx()/setXxx()方法

继承

(1)把多个类中相同的成员给提取出来定义到一个独立的类中。然后让这多个类和该独立的类产生一个关系,
            这多个类就具备了这些内容。这个关系叫继承。

(2)Java中如何表示继承呢?格式是什么呢?
A:用关键字extends表示
B:格式:class 子类名 extends 父类名 {}

(3)继承的好处:
A:提高了代码的复用性
B:提高了代码的维护性
C:让类与类产生了一个关系,是多态的前提

(4)继承的弊端:
A:让类的耦合性增强。这样某个类的改变,就会影响其他和该类相关的类。
原则:低耦合,高内聚。
耦合:类与类的关系
内聚:自己完成某件事情的能力
B:打破了封装性

(5)Java中继承的特点
A:Java中类只支持单继承
B:Java中可以多层(重)继承(继承体系)

(6)继承的注意事项:
A:子类不能继承父类的私有成员
B:子类不能继承父类的构造方法,但是可以通过super去访问
C:不要为了部分功能而去继承

(7)什么时候使用继承呢?
A:继承体现的是:is a的关系。
B:采用假设法

(8)Java继承中的成员关系
A:成员变量
a:子类的成员变量名称和父类中的成员变量名称不一样,这个太简单
b:子类的成员变量名称和父类中的成员变量名称一样,这个怎么访问呢?
子类的方法访问变量的查找顺序:
在子类方法的局部范围找,有就使用。
在子类的成员范围找,有就使用。
在父类的成员范围找,有就使用。
找不到,就报错。

B:构造方法
a:子类的构造方法默认会去访问父类的无参构造方法
是为了子类访问父类数据的初始化
b:父类中如果没有无参构造方法,怎么办?
子类通过super去明确调用带参构造
子类通过this调用本身的其他构造,但是一定会有一个去访问了父类的构造
让父类提供无参构造

C:成员方法
a:子类的成员方法和父类中的成员方法名称不一样,这个太简单
b:子类的成员方法和父类中的成员方法名称一样,这个怎么访问呢?
通过子类对象访问一个方法的查找顺序:
在子类中找,有就使用
在父类中找,有就使用
找不到,就报错

多态

(1)同一个对象在不同时刻体现出来的不同状态。

(2)多态的前提:
A:有继承或者实现关系。
B:有方法重写。
C:有父类或者父接口引用指向子类对象。
多态的分类:
a:具体类多态
class Fu {}
class Zi extends Fu {}
Fu f = new Zi();
b:抽象类多态
abstract class Fu {}
class Zi extends Fu {}
Fu f = new Zi();
c:接口多态
interface Fu {}
class Zi implements Fu {}
Fu f = new Zi();

(3)多态中的成员访问特点
A:成员变量
编译看左边,运行看左边
B:构造方法
子类的构造都会默认访问父类构造
C:成员方法
编译看左边,运行看右边
D:静态方法
编译看左边,运行看左边

为什么?
因为成员方法有重写。

(4)多态的好处:
A:提高代码的维护性(继承体现)
B:提高代码的扩展性(多态体现)

(5)多态的弊端:
父不能使用子的特有功能。
现象:子可以当作父使用,父不能当作子使用。

(6)多态中的转型
A:向上转型:从子到父
B:向下转型:从父到子

4.抽象类和接口

抽象类

(1)把多个共性的东西提取到一个类中,这是继承的做法。

    但是在有些时候,方法声明一样,但是方法体不一样。

    也就是每个具体的对象在具体实现的时候内容不一样。

    所以,我们在定义这些共性的方法的时候,就不能给出具体的方法体。

    而一个没有具体的方法体的方法是抽象的方法。

    在一个类中如果有抽象方法,该类必须定义为抽象类。

 

(2)抽象类的特点

A:抽象方法只能定义在抽象类中,抽象类和抽象方法必须由abstract关键字修饰 B:抽象类中不一定有抽象方法,

  但是有抽象方法的类一定是抽象类

C:抽象类不能实例化,只有通过子类继承抽象类并覆盖了抽象类中的所有抽象方法后,该子类才可以实例化。

D:抽象类的子类

    a:是一个抽象类。

    b:是一个具体类。这个类必须重写抽象类中的所有抽象方法。

    c:抽象类只能单继承。

 

(3)抽象类的成员特点:

     A:成员变量:有变量,有常量

     B:构造方法:有构造方法

     C:成员方法:有抽象,有非抽象

 

(5)抽象类的几个小问题

A:抽象类有构造方法,不能实例化,那么构造方法有什么用?

    用于子类访问父类数据的初始化

B:一个类如果没有抽象方法,却定义为了抽象类,有什么用?

    为了不让创建对象

C:abstract不能和哪些关键字共存

   a:final 冲突

   b:private 冲突

   c:static 无意义

接口

(1)对于额外的功能扩展,java提供了接口表示。

(2)接口的特点:

     A:接口用关键字interface修饰

         interface 接口名 {}

     B:类实现接口用implements修饰

        class 类名 implements 接口名 {}

     C:接口不能实例化

     D:接口的实现类

         a:是一个抽象类。

         b:是一个具体类,这个类必须重写接口中的所有抽象方法。

(3)接口的成员特点:

     A:成员变量:只能是常量

         默认修饰符:public static final

     B:构造方法:没有构造方法

     C:成员方法:只能是抽象的

         默认修饰符:public abstract

(4)类与类,类与接口,接口与接口

    A:类与类

        继承关系,只能单继承,可以多层继承

    B:类与接口

       实现关系,可以单实现,也可以多实现。

       还可以在继承一个类的同时,实现多个接口

    C:接口与接口

        继承关系,可以单继承,也可以多继承

区别

1:抽象类只能被继承,而且只能单继承。 

      接口需要被实现,而且可以多实现。  

2:抽象类中可以定义非抽象方法,子类可以直接继承使用。 

      接口中都有抽象方法,需要子类去实现。

3:抽象类使用的是  is a 关系。 

      接口使用的 like a 关系。 

4:抽象类的成员修饰符可以自定义。 

      接口中的成员修饰符是固定的。全都是public的。    

5.构造方法

(1)作用:用于对对象的数据进行初始化

(2)格式:
A:方法名和类名相同
B:没有返回值类型,连void都不能有
C:没有返回值
思考题:构造方法中可不可以有return语句呢?
可以。而是我们写成这个样子就OK了:return;
其实,在任何的void类型的方法的最后你都可以写上:return;

(3)构造方法的注意事项
A:如果我们没写构造方法,系统将提供一个默认的无参构造方法
B:如果我们给出了构造方法,系统将不再提供默认构造方法
如果这个时候,我们要使用无参构造方法,就必须自己给出。
推荐:永远手动自己给出无参构造方法。

(4)给成员变量赋值的方式
A:setXxx()   B:带参构造方法

        代码:Student s = new Student();做了哪些事情?(理解)
(1)把Student.class文件加载到内存
(2)在栈内存为s开辟空间
(3)在堆内存为学生对象申请空间
(4)给学生的成员变量进行默认初始化。null,0
(5)给学生的成员变量进行显示初始化。林青霞,27
(6)通过构造方法给成员变量进行初始化。刘意,30
(7)对象构造完毕,把地址赋值给s变量
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 面试 面向对象