黑马程序员技术交流社区
标题:
面向对象重点知识初探
[打印本页]
作者:
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