首页 > 代码库 > Java学习笔记<3>面向对象相关

Java学习笔记<3>面向对象相关

面向对象的基本思想

从现实世界客观存在的事务出发来构造软件系统,并在系统的构造中尽可能运用人类的自然思维方式,如抽象、分类

承、聚合、多态等。

 

 

类和对象的关系

 

 

 

对象中存储了类规定的数据类型,并且对象可以调用类的方法。

 

 

 

java面向对象

 

<1>对象是java程序的核心,一切皆对象。

<2>对象可以看成静态属性(成员变量)和动态属性(方法)的封装体。

<3>类是创新同一类型对象的模版,定义了该类型对象应具有的成员变量及方法。

 

 

 

类的定义

 

 

成员变量可以用java语言的任何一种数据类型(包括基本数据类型和引用数据类型)

成员变量的作用域为整个类体。

在定义成员变量时可以对其初始化,如上面的int age = 20; 如果不初始化,java会用默认的值初始化。

 

默认初始化表:

 

 

 

引用

 

String s ;   // 声明了一个String类型的引用,但并没有让它指向某个对象。

s = new String("hello world"); //使用new语句创建了一个String类型的对象,并用s指向它。

 

 

对象的创建和使用

 

<1>必须使用new关键字创建对象

<2>使用对象(引用) . 成员变量来引用对象的成员变量

<3>使用对象(引用) . 方法+参数列表来调用对象的方法

<4>同一类的每个对象有不同的成员变量存储空间

<5>同一类的每个对象共享该类的方法(在代码段)

 

 

构造方法

 

<1>使用new+构造方法创建一个新的对象

<2>构造函数是定义在类中一个用来初始化对象的函数

<3>构造函数和类名相同且没有返回值

<4>创建对象时,使用构造函数初始化对象的成员变量

<5>当没有构造函数时,编译器会自动添加形如 类名(){...}的构造函数

 

 

 

 

 

重载

 

方法名相同而参数不同。调用时根据相应的参数选择对应的方法。

 

 

 

this关键字

 

<1>在类的方法定义中使用this关键字代表使用该方法的对象的引用

<2>当必须指出使用该方法的对象是谁时要使用this指针

<3>有时使用this指针可以处理方法中参数与成员变量重名的现象

<4>this可以看作一个变量,值是当前对象的引用

 

 

 

 

static关键字

 

<1>在类中,用static声明的成员变量为静态成员变量,它为类的公共变量,第一次使用时被初始化。

<2>对于该类的所有对象,static变量只有一份

<3>用static声明的方法为静态方法,在调用该方法时,不会将对象的引用传递给它,所以在static方法中

不能访问非static的成员。

<4>可以通过对象引用或类名访问静态成员。

 

 

 

package和import

 

为便于管理大型软件系统中数目众多的类,解决命名冲突问题,java引入包(package)机制

<1>package语句为java源文件的第一条语句,指定该文件中定义的类所在的包

<2>java编译器把包对应于文件系统的目录管理,package里面的 . 指明包的层次。如:

package com.sxt //该文件位于 .\com\sxt目录下

<3>如果将一个类打包,使用该类时,必须使用该类的全名。例如:com.sxt.Myclass

也可以使用import在文件开头引入要使用的类,如: import com.sxt.Myclass;

 

小结:

 

 

 

 

主要的包介绍:

 

 

 

 

 

继承

 

<1>java中使用extends关键字实现类的继承机制

<2>通过继承,子类拥有基类的所有成员

<3>java只支持单继承

 

 

 

访问控制

 

 

 

 

 

 

方法的重写

 

<1>在子类中可以对继承来的方法进行重写

<2>重写方法和被重写方法具有相同的返回类型、方法名和参数表

<3>重写方法不能使用比被重写方法更严格的访问权限

 

 

super关键字

 

在java中使用super关键字来引用基类的成分,如:

 

 

 

 

继承中的构造方法

 

<1>子类的构造中,必须调用基类的构造方法

<2>子类可以在自己的构造函数中使用super(...)调用基类的构造方法。

<3>可以使用this(...)调用本类另外的构造方法。

<4>如果调用super,必须写在子类构造函数的第一行

<5>如果子类没有显示的调用基类的构造方法,系统则自动调用基类的无参构造函数

<6>在5中,若基类没有无参构造函数则编译出错

 

 

 

 

object类

 

<1>object类是java所有类的根基

<2>若类的声明中未使用extends指明其基类,则默认基类为object类

 

toString方法

 

<1>在进行String与其他类型数据进行连接时,如System.out.println(name);时,将自动调用toString方法

<2>可以根据需要在用户的自定义类型中重写toString方法

 

equals方法

 

<1>提供对象是否相等的逻辑方法

<2>可以根据需要在用户的自定义类型中重写equals方法

 

 

 

对象转型

 

<1>一个基类的引用可以指向其子类的对象

<2>一个基类的引用不能调用子类新增加的成员变量或方法

<3>可以通过 instanceof 类名来判断该引用类型变量所指向的对象是否属于该类或该类的子类

 

 

 

动态绑定和多态

 

动态绑定是指在运行期间而非编译期,判断所引用的实际类型,根据其实际类型调用其相应的方法。

条件:

<1>要有继承

<2>要有重写

<3>基类引用指向子类对象

 

 

 

抽象类

 

<1>用abstract关键字修饰一个类时,这个类叫做抽象类。修饰一个方法时,称为抽象方法。

<2>含有抽象方法的类,必须声明为抽象类。

<3>抽象类必须被继承,抽象方法必须被重写。

<4>抽象类不用实例化。

<5>抽象方法只需声明,不需要实现。

 

 

 

 

 

final关键字

 

<1>final的变量的值不能被改变

<2>final的方法不能被重写

<3>final的类不能被继承

 

 

 

接口

 

<1>接口:抽象方法和常量值定义的集合

<2>从本质上来讲,接口是一种特殊的抽象类,这种抽象类只包括常量和方法的定义,而没有变量和方法的实现

 

举例:

 

 

 

 

 

接口特性

 

<1>多个无关的类可以实现同一接口

<2>一个类可以实现多个无关的接口

<3>与继承相似,接口与实现类之间存在多态性

<4>接口中的成员变量默认是 public static final类型,也只能是这个类型

<5>接口只能定义抽象的方法,这些方法默认是public的,也只能是public类型的

<6>接口可以继承其他的接口,并添加新的属性和方法