黑马程序员技术交流社区

标题: 面向对象重点知识初探 [打印本页]

作者: Allen爱伦    时间: 2015-12-3 22:40
标题: 面向对象重点知识初探
本帖最后由 Allen爱伦 于 2015-12-3 23:18 编辑

面向对象的思想是一种更符合我们思想习惯的思想,可以将复杂的事情简单化,将我们从执行者变成了指挥者。
面向对象开发  就是不断的创建对象,使用对象,指挥对象做事情。   
面向对象设计  其实就是在管理和维护对象之间的关系。   
面向对象特征  封装(encapsulation)  继承(inheritance)  多态(polymorphism)

继承:把多个类中相同的成员给提取出来定义到一个独立的类中。然后让这多个类和该独立的类产生一个关系,这多个类就具备了这些内容。这个关系叫继承。   
继承的好处:   
A:提高了代码的复用性   
B:提高了代码的维护性   
C:让类与类产生了一个关系,是多态的前提  
继承的弊端:   
A:让类的耦合性增强。这样某个类的改变,就会影响其他和该类相关的类。   
原则:低耦合,高内聚。     耦合:类与类的关系     内聚:自己完成某件事情的能力   
B:打破了封装性  

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

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


多态:同一个对象在不同时刻体现出来的不同状态。   
多态前提:     
A:有继承或者实现关系。     
B:有方法重写。     
C:有父类或者父接口引用指向子类对象。   
多态中的成员访问特点   
A:成员变量    编译看左边,运行看左边   
B:构造方法    子类的构造都会默认访问父类构造   
C:成员方法    编译看左边,运行看右边   
D:静态方法    编译看左边,运行看左边

多态的好处  提高了程序的维护性(由继承保证) 提高了程序的扩展性(由多态保证)  
多态的弊端  不能访问子类特有功能     
静态的特点:   A:随着类的加载而加载   B:优先与对象存在   C:被类的所有对象共享    这其实也是我们判断该不该使用静态的依据。   D:可以通过类名调用

静态变量和成员变量的区别   
A:所属不同    静态变量:属于类,类变量    成员变量:属于对象,对象变量,实例变量   
B:内存位置不同    静态变量:方法区的静态区    成员变量:堆内存   
C:生命周期不同    静态变量:静态变量是随着类的加载而加载,随着类的消失而消失    成员变量:成员变量是随着对象的创建而存在,随着对象的消失而消失 D:调用不同    静态变量:可以通过对象名调用,也可以通过类名调用    成员变量:只能通过对象名调用



成员变量和局部变量的区别(理解)  
(1)在类中的位置不同   成员变量:类中方法外   局部变量:方法定义中或者方法声明上  
(2)在内存中的位置不同   成员变量:在堆中   局部变量:在栈中  
(3)生命周期不同   成员变量:随着对象的创建而存在,随着对象的消失而消失   局部变量:随着方法的调用而存在,随着方法的调用完毕而消失  
(4)初始化值不同   成员变量:有默认值   局部变量:没有默认值,必须定义,赋值,然后才能使用   
抽象类:把多个共性的东西提取到一个类中,这是继承的做法。但是这多个共性的东西,在 有些时候,方法声明一样,每个具体的对象在具体实现的时候内容不一样。所以,我们在定义这些共性的方法的时候,就不能给出具体的方法体。而一个没有具体的方法体的方法是抽象的方法。在一个类中如果有抽象方法,该类必须定义为抽象类。


抽象类的几个小问题   
A:抽象类有构造方法,不能实例化,那么构造方法有什么用?    用于子类访问父类数据的初始化   
B:一个类如果没有抽象方法,却定义为了抽象类,有什么用?    为了不让创建对象   
C:abstract不能和哪些关键字共存    a:final 冲突    b:private 冲突    c:static 无意义   

抽象类的特点   
A:抽象类和抽象方法必须用关键字abstract修饰   
B:抽象类中不一定有抽象方法,但是有抽象方法的类一定是抽象类   
C:抽象类不能实例化   
D:抽象类的子类    a:是一个抽象类。    b:是一个具体类。这个类必须重写抽象类中的所有抽象方法。

接口:比如:猫钻火圈,狗跳高等功能,不是动物本身就具备的,    是在后面的培养中训练出来的,这种额外的功能,java提供了接口表示。


抽象类和接口的区别   
成员区别  抽象类 :变量,常量;有抽象方法;抽象方法,非抽象方法 接口   :常量;抽象方法   
关系区别  类与类 继承,单继承  类与接口 实现,单实现,多实现 接口与接口 继承,单继承,多继承   
设计理念区别  抽象类  被继承体现的是:”is a”的关系。
共性功能 接口  被实现体现的是:”like a”的关系。扩展功能

==和equals()的区别?   
A:==    基本类型:比较的是值是否相同    引用类型:比较的是地址值是否相同   
B:equals()      只能比较引用类型。默认情况下,比较的是地址值是否相同。    但是,我们可以根据自己的需要重写该方法。   

StringBuffer跟数组的区别  二者都可以看出是一个容器,装其他的数据。  但是StringBuffer的数据最终是一个字符串数据。  而数组可以放置多种数据,但必须是同一种数据类型的。




















欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2