Java程序设计——面向对象编程部分

来源:互联网 发布:山大网络教育平台 编辑:程序博客网 时间:2024/05/12 05:43

Java程序设计——面向对象编程部分

作者:zccst

 

Java编程,淋漓尽致地体现了面向对象编程的精华。    ——zccst

 

前面的话

曾经有一段时间,很排斥Java。认为做Java的人水平和能力等都比较低,那绝对是一种鄙夷的态度。但是,在公司项目的迫压下,我开始了Java之旅。由于具备良好的C++基础,所以差不多几天时间就上手了。是在后来才发现,Java远非我想象的那么简单。我闯进了一片新的天空,很舒服。也是在这几天里,我深刻地体会到“机器是最好的老师”这句话的涵义(大学时候没做到)。终于可以力所能及,甚至游刃有余,我想,这大概是我从新手或菜鸟晋级的最好方式吧!O(_)O哈哈~

 

 

Java语言程序设计》学习框架

Java概述            Java由来、演化、分流;开发工具、平台搭建;特点、前景

Java结构化编程      关键字、标识符、基本数据类型、运算符、表达式、流程控制;数组

Java面向对象编程    类和对象;封装性、继承性、多态性;抽象类;最终类;接口

Java常用类库        langappletawtionetutil

Java异常处理       

 

本文重点讲解的就是:Java面向对象编程部分。(已用黑体字)

由于从大三开始接触C++,面向对象的基础知识还算可以,所以本文略去Java中与C++相同的部分。惭愧的是,近几年来没多大进展。

 

类和对象

类、对象、构造函数(constructor)、垃圾自动回收机制的定义和使用。还有默认初始化。

构造函数,是用来对新创建对象进行初始化的。除与类名同、没有任何返回值外,在语法结构上与一般的方法相同。

构造函数实例化一个类对象格式:类名对象名 = new 构造函数(实际参数)

a, new为对象分配空间

b, 执行构造方法为对象进行初始化

Java没有析构,但提供了一个类似的方法:protectedfinalize(); 另外还有方法:System.gc()

 

Java程序由类组成,一个程序至少要包含一个类。Java程序员的任务就是设计出这样的类来解决实际问题。

 

程序运行时的内存占用

代码区    存放程序的代码部分

数据区    存放程序的全局数据和静态数据

堆区      存放程序动态申请的数据(比如:new

栈区      存放程序的局部数据和参数

Person p1 = new Person(“Jack”,”Male”,23);

Person p2 = p1;

Person p3 = new Person(“Jack”,”Male”,23);

p1 p2指向同一个对象;p1 p3指向不同的对象。

 

类的静态属性和静态方法

class中定义的变量分为类变量(静态变量)和实例变量;方法分为类方法(静态方法)和实例方法。都用static修饰。弄清楚的最好办法是实践。

类变量和类方法由该类产生的所有实例共享。调用方式:类名 / 对象名.静态变量(静态方法)

注:static方法中不能处理非static的域或方法。

 

 

面向对象的三大特征:封装性、继承性、多态性。

public公共类:封装。控制用户对类修改和访问数据的程度。

其对于关系,可以用一个图表清楚的表示:

 


public公共类:继承和派生

extends一套规则  this super

/*super.name = name;

super.sex = sex;

super.age = age;  */

就这段代码,曾花了两个小时,每次看到,都会想到那天下午。

 

public公共类:多态——重载和覆盖

1,静态多态性:编译时,重载(overload)  函数同名,参数列表不同

一般函数重载,Java类库中的类也有很多重载的方法,比如println();

构造函数重载  TestPerson2.java

 

2,动态多态性:运行时,覆盖(override)  子类对父类的方法覆盖

TestPerson1.java

nullthissuper三个域。this,super区别见申雪萍课件——this引用与super引用的对比

 

 

abstract抽象类:抽象类和抽象方法

抽象类是不能实例化的。只能被继承。

抽象方法是没有方法体的,以“;”介绍。例,abstract public double area();

抽象类至少有一个抽象方法,反过来一个类有抽象方法,则这个类必须声明为抽象类。

 

最终类和最终方法

final类中的方法可以不声明为final方法,但实际上final类中的方法都是隐式final方法。

final修饰的方法不一定要存在于final类中。

如果一个变量用final修饰,表明它在程序中是不能修改的常量。

final修饰的方法既不能覆盖,也不能被重载,它是一个最终方法,其定义永远不能改变。

final对象重新赋值会产生编译错误,但是对final对象中的变量赋值是可以的。

 

接口(interface:用来实现类间多重继承功能的结构

每一个方法都是抽象的,没有方法体,只有名字和参数表。行为留给实现该接口的类完成。

每一个变量都是静态的常量,都必须赋值。

(所以方法默认是public abstract,所有变量都默认是public static final。)

 

第一步:用关键字interface定义接口:

[public] [interface] 接口名称 [extends父接口名列表]  # 继承的也是接口

{

// 静态常量

[public] [static] [final] 数据类型 变量名 = 常量名;

// 抽象方法

[public] [abstract] [native] 返回值类型 方法名(参数列表);

}

 

接口可以继承,也可以多重继承,例如:

interface IA{…}

interface IB{…}

interface IC{…}

interface ID{…} extends IA, IB, IC{…}

 

第二步:用关键字implements实现接口:

[修饰符] class 类名 [extends父类名][implements接口A,接口B…]

{

类的成员变量和成员方法;

为接口A中的所有方法编写方法体,实现接口A;

为接口B中的所有方法编写方法体,实现接口B;

……

}

例如:

[修饰符] class Aimplements IA{…}               # class A要实现接口IA中的所有接口方法。

[修饰符] class B extendsA implements IB, IC{…}    # class B 要实现IB, IC中的所有接口方法。

注:如果哪怕只有一个接口方法没有实现,则那个类也要声明称抽象的。

 

通过接口可以在运行时动态定位类所调用的方法。接口与重载、覆盖一样,是多态性的体现。

接口的好处是把方法描述与方法功能的实现分开考虑,降低了程序的复杂性,使程序设计灵活,便于扩充修改。