黑马程序员技术交流社区

标题: 今天复习面向对象的一点资料 欢迎相互交流 [打印本页]

作者: 18273250088    时间: 2015-11-7 17:41
标题: 今天复习面向对象的一点资料 欢迎相互交流
认识面向对象和面向过程的区别
        面向过程:就是处理事务的时候每一步骤都要了解
        面向对象:就是将要处理的事务交给对象  将我们从执行者转换成指挥者

面向对象的总思想就是 不断的找对象,使用对象来处理的事务 如果没对象就创建对象来
不断的维护和管理对象之间的关系
这样的好处是可维护性和扩展性 非常好

面向对象的特征: 封装   继承    多态

类与对象

我们学习编程就是要将现实生活中的事务用程序来描述出来

现实中的各种事务的属性就是程序里面的成员变量
现实中的各种事务的行为就是程序里面的方法
所有我们设计程序的时候要多考虑下现实事务的各个属性和行为 不要违背现实事务的原则

类就是一组相关属性和行为的集合
对象就是该类事物的具体体现
在JAVA文件中写两个类:一个是基本类  一个是测试类
一般文件名和测试类的名字相同

如何创建对象: 类名  对象名 = new 类名();

如何使用成员变量: 对象名点变量名

如何使用成员方法: 对象名点方法名

成员变量和局部变量的不同
        1.在类中的位置不同
                成员变量在类中方法外
                局部变量在方法定义中或方法声明上

        2.在内存的位置不同
                成员变量在堆内存
                局部变量在栈内存
       
        3.生命周期不同
                成员变量:随对象的创建而存在,随着对象的消失而消失
                局部变量:随着方法的调用而存在,随着方法的弹栈而消失

        4.初始化不同
                成员变量:有默认的初始化值
                局部变量:没有初始化值 需要赋值才能使用

注意:局部变量名字可以和成员变量名称相同 在方法中采用的是就近原则
      基本数据类型有:byte  short  int long float double char boolear
      引用数据类型有:数组  枚举  类  接口

匿名对象 就是没有名字的对象

匿名对象 仅仅只能调用一次而已   如果要调用多次是不合适的

匿名对象可以作为实际参数传替


面向对象的第一大特性:  封装

封装  是指隐藏对象的属性和实际细节  仅对为提供公共的访问方法

封装的好处: 隐藏实现细节,提供公共的访问方式  提高了代码的复用性  提高了安全性

封装的原则:将不需要的的内容隐藏起来  把属性隐藏提供公共的访问方式

封装的关键字: private (私有的)

private 的特点:
                是一种权限修饰符
                可以修饰成员变量和成员方法
                被private 修饰的成员只能在本类中被访问

构造方法
        就是给对象的数据进行初始化

构造方法的特点
        方法名和类名一致
        没有返回值  连void都没有
        没有返回值  return

构造方法的重载
        方法名相同 与返回值类型无关

构造方法的注意事项
        如果我们没有给出构造方法  系统就自动给我们一个无参的构造方法
        如果我们给出了构造方法 系统将不会再给构造方法
                建议:我们永远都手动给出一个无参的构造方法

static 关键字

特点:
        随着类的加载而加载
        优先于对象的存在
        被类的所有的对象共享
        可以通过类名调用


static 的注意事项
        在静态方法中是没有this 关键字的
                这是因为静态是随类的加载而加载  this是随对象的创建而存在
                静态比对象先存在
        静态方法值能访问静态的成员变量和静态的成员方法
                静态方法:成员变量只能访问静态变量 成员方法值能访问静态成员方法
                非静态方法:成员变量可以是静态也可以是非静态的 成员方法可以是静态的也可以是非静态的

总的一句话就是:静态的只能访问静态的

(静态变量和成员变量的区别)
* 静态变量也叫类变量  成员变量也叫对象变量
* A:所属不同
        * 静态变量属于类,所以也称为为类变量
        * 成员变量属于对象,所以也称为实例变量(对象变量)
* B:内存中位置不同
        * 静态变量存储于方法区的静态区
        * 成员变量存储于堆内存
* C:内存出现时间不同
        * 静态变量随着类的加载而加载,随着类的消失而消失
        * 成员变量随着对象的创建而存在,随着对象的消失而消失
* D:调用不同
        * 静态变量可以通过类名调用,也可以通过对象调用
        * 成员变量只能通过对 象名调用

代码块
     在JAVA中用{}括起来的代码被称为代码块

代码块分为:局部代码块   构造代码    静态代码块    同步代码块

局部代码块:在方法中出现  限定了变量的生命周期,及早的释放,提高了内存使用率

构造代码块:在类中方法外出现  多个构造方法中相同代码存放到一起 每次调用构造方法都执行 并且在构造方法前执行

静态代码块: 在类中方法外出现  并加上 static关键字修饰 用于给类进行初始化 在加载的时候执行  并且只执行一次 一般用在加驱动


面向对象的第二大特性: 继承

继承:让类与类之间产生关系,子父类关系

继承的好处:提高了代码的复用性
            提高了代码的维护性
            让类与类之间产生了关系,是多态的前提

继承的弊端:类的耦合性增强了

开发的原则:高内聚  低耦合

继承的特点:java中只支持单继承和多层继承 不支持多继承
                如果想用整个体系的所有功能用最底层的类创建对象
                如果想看这个体系的共性看最顶层的类

继承的注意事项:
        子类只能继承父类所有非静态的成员方法和成员变量
        子类不能继承父类的构造方法,但可以通过super关键字来调用
        不要为了获取部分功能而去使用继承 ,继承要秉着 is a 的关系

this 和 super 的使用区别
        this 是调用本类的成员、方法、构造方法 也可以调用父类的
        super是调用父类的成员、方法、构造方法,不可以调用子类

方法的重写 就是子父类出现了一模一样的方法,而功能主体可以重写父类的方法

方法重写注意事项
        父类中私有方法不能被重写
        子类重写父类方法时  访问权限要大于或等于父类的权限  最好是一致
        父类静态方法,子类必须通过静态方法进行重写(其实这不算重写 只能算是静态区的方法覆盖)

Override和Overload的区别?Overload能改变返回值类型吗?
Overload(重载) 可以改变返回值 值看参数列表
方法重写:子类中出现了和父类中方法声明一模一样的方法 与返回类型有关 返回值是一致的或者是子父类
方法重载:本类中出现的方法名一样,参数列表不同的方法 与返回值无关
子类对象调用方法的时候是先在本身类里面找 如果没有就到父类中去找

final修饰特点
        * 修饰类,类不能被继承
        * 修饰变量,变量就变成了常量,只能被赋值一次
        * 修饰方法,方法不能被重写


面向对象第三大特性:多态
多态:就是事物存在的多种形态
多态的前提:要有继承关系  要有方法重写 要有父类引用指向子类对象
成员变量 编译看左边(父类) 运行看左边(父类)
成员方法 编译看左边(父类) 运行看右边(子类)
静态方法 编译看左边(父类) 运行看左边(父类)
多态的好处
        * a:提高了代码的维护性(继承保证)
        * b:提高了代码的扩展性(由多态保证)









作者: zhou8351104    时间: 2015-11-7 17:44
先顶了  在看~~~~~~~~~~~·
作者: 秋色潇湘    时间: 2015-11-7 17:45
叮叮叮~ 长沙校区 ~ UP
作者: dongran    时间: 2015-11-7 17:46
顶万总~~
作者: naceyeve    时间: 2015-11-7 18:15
顶起
作者: 许本亮    时间: 2015-11-7 19:09
我也开始复习了,共勉
作者: 大雕会飞    时间: 2015-11-7 22:35
谢谢分享,学习啦!
作者: peide0427    时间: 2015-11-7 22:46
java 也学习OC吗??
作者: 18273250088    时间: 2015-11-8 21:50
peide0427 发表于 2015-11-7 22:46
java 也学习OC吗??

没有啊 。。。目前是最基础的




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