黑马程序员 -面向对象

来源:互联网 发布:矩阵的秩的性质总结 编辑:程序博客网 时间:2024/05/16 10:49

1. 面向对象

是将功能封装进对象,强调了功能的对像。
面向对象是基于面向过程。是一种思想
符合人思考习惯的一种思想;由复杂变简单、由执行者变指挥者
eg:我要达到某种目的(结果) ,就寻找能帮我达到该结果的功能对象。
面向对象的三大特性 :
封装、继承、多态

1.2 概念

: 对现实世界中某类事物的描述,是抽象的,概念上的定义。
对象: 事物具体存在的个体。
解释:定义类,就是在描述事物,在定义属性和行为。描述事物其实就是在描述事物
的属性和行为。
属性对应是类中 变量, 行为对应的类中的 函数( ( 方法) )。属性和行为共同成为类中的成
员(成员变量和成员方法)。
成员变量和局部变量
作用范围:成员变量作用于整个类中。局部变量作用于函数(方法)中或者整个语句
中。
内存位置:成员变量存在于堆内存中。随着对象存在而存在,随着对象消失而消失。
局部变量存在于栈内存中。当方法被调用或语句被执行的时候存在;当方法调用完,
或者语句结束后,就自动释放内存。
初始值:成员变量有默认初始值。局部变量没有默认初始值,使用前必须赋值。
定义 位置:成员变量定义在类中,方法外;局部变量定义在方法内或者作为方法的形
式参数存在。

2 封装

封装是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。

public class Husband {    /*     * 对属性的封装     * 一个人的姓名、性别、年龄、妻子都是这个人的私有属性     */    private String name ;    private String sex ;    private int age ;    private Wife wife;    /*     * setter()、getter()是该对象对外开发的接口     */    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getSex() {        return sex;    }    public void setSex(String sex) {        this.sex = sex;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }    public void setWife(Wife wife) {        this.wife = wife;    }}

封装不是私有(private ) ,私有仅仅是封装的一种表现形式。

代码块:由{}括起来的代码。
分类:局部代码块(定义在方法中的代码块) 、构造代码块(定义在方法外的代码
块)
作用:
局部代码块:控制代码块内变量的生命周期和作用域(使用范围) ,从而提高效率。
构造 代码块 :把 所 有 构造方法 中 共同的内容定义在构造代码块 。
构造代码块 中 定义的是不同对象共性初始化内容。
构造代码块对象一建立就运行,而且优先于构造函数执行。
作用:给对象进行初始化。

this 关键字
this 代表 本类的 对象。代表所在函数所属对象的引用 。代表所在函数所属对象的引用。简单说,谁调用 this 所在
的方法,this 就代表谁。
this 应用:用于区分同名成员变量和局部变量。
当定义类中功能时, 该函数内部要用到调用该函数的对象时, 用 this 来表示这个对
象。但凡本类功能内部使用了了本类对象,都用 this 表示。
在构造函数间互相调用对象时,只能用 this(参数) ; (参数) ;并且 this(参数)只能定义
在构造函数的第一个语句。因为初始化动作要先执行。若初始化中还有初始化,先
执行更细节初始化,然后再执行自己的初始化。this(参数)不能用在一般函数中。
static 关键字
定义:static 修饰的成员是在类中的定义,属于共享数据,静态数据。
特点1 用于修饰成员
2 被static 修饰的成员被所有的对象共享
3 Static 优先于对象的纯在
4 Static 修饰的数据是共享数据,对象中的存储的是特有数据
5 Static 修饰的成员多一种调用方式。就是可以直接被类名所调用类名.静态成员、
成员变量与静态变量的不同。
1 两个变量的生命周期不同。
成员变量随着对象的创建而存在,随着对象的被回收而释放。
静态变量随着类的加载而存在,随着类的消失而消失。
2 调用方式不同
成员变量只能被对象调用
静态变量可以对象调用,还可以被类名调用
3 数据存储的位置不同
成员变量数据存储在堆内存的对象中,所以也叫对象的特有数据。
静态变量的数据存储在方法去的共享数据区的静态去。也叫兑现的共享数据

静态 (方法和变量)的注意事项
1 静态方法只能访问静态成员,(非静态既可以访问静态,又可以访问非静态)
2 静态方法中不可以使用this 或者super关键字
3 主函数是静态的

继承
在java中使用extends关键字来表示继承关系。当创建一个类时,总是在继承,如果没有明确指出要继承的类,就总是隐式地从根类Object进行继承

“`
class Person {
public Person() {

}

}

class Man extends Person {
public Man() {

}

}
“`1.子类继承父类的成员变量

  当子类继承了某个类之后,便可以使用父类中的成员变量,但是并不是完全继承父类的所有成员变量。具体的原则如下:

  1)能够继承父类的public和protected成员变量;不能够继承父类的private成员变量;

  2)对于父类的包访问权限成员变量,如果子类和父类在同一个包下,则子类能够继承;否则,子类不能够继承;

  3)对于子类可以继承的父类成员变量,如果在子类中出现了同名称的成员变量,则会发生隐藏现象,即子类的成员变量会屏蔽掉父类的同名成员变量。如果要在子类中访问父类中同名成员变量,需要使用super关键字来进行引用。

  2.子类继承父类的方法

  同样地,子类也并不是完全继承父类的所有方法。

  1)能够继承父类的public和protected成员方法;不能够继承父类的private成员方法;

  2)对于父类的包访问权限成员方法,如果子类和父类在同一个包下,则子类能够继承;否则,子类不能够继承;

  3)对于子类可以继承的父类成员方法,如果在子类中出现了同名称的成员方法,则称为覆盖,即子类的成员方法会覆盖掉父类的同名成员方法。如果要在子类中访问父类中同名成员方法,需要使用super关键字来进行引用。
多态
指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用)
多态出现的缘由:java的引用变量有两种类型:一个是编译时的类型,一个是运行时类型。
编译时类项:声明该变量时使用的类型决定。
运行时类项:实际赋给该变量的对象决定
如果编译时和运行时类项不一样就会出现所谓的多态(polymorphism)。

多态:相同类项的变量执行同一个方法时,呈现出不同的行为特征这就是多态。

eg:

class animal{

eat(){
system.out.print(“吃”)
}

}
class dog{

eat(){
system.out.print(“啃骨头”)
}
}
public class duotai{
public static void main(string arg[]){

animal a = new dag();
a.eat()
}

}

运行结果为 : 啃骨头

一句话 编译看左边 ,运行看右边

0 0
原创粉丝点击