面向对象和面向对象的高级概念

发布 2021-04-26 17:36:28 阅读 1436

面向对象。

主要内容:1. 方法的定义。

2. 类的定义。

3. 对象的实例化。

4. 构造方法。

5. 值传递。

6. 访问控制修饰符。

7. 面向对象的特性。

a) 封装。

b) 继承。

c) 多态。

8. 关键字。

9. 抽象类。

10. 接口。

11. 作业。

a) 方法的基本格式。

[修饰符] 返回值类型方法名([参数1] ,参数2 ] 是方法体,必须写,不能省略。

b) 无参数的无返回值的方法。

c) 有参数的无返回值的方法。

d) 无参数的有返回值的方法。

e) 有参数有返回值的方法。

世界万物是有什么组成的,在j**a的世界中,一切皆是对象。

那我们怎么来定义类呢?

那我们身边有哪些对象呢?

比如:人。具有特征:身高,体重,姓名,性别等等。

具有行为:吃饭,穿衣,睡觉,运动,思考,等等。

比如:汽车。

具有特征:颜色,品牌,性能等等。

具有行为:行驶,倒车,鸣笛等等。

比如:灯泡。

具有特征:**,大小等等

具有行为:开,关,亮,暗等等。

类的属性:对象所具有的特征。

类的方法:对象所执行的操作。

类可以看成一类对象的模板。

对象可以看成是类的一个实例(实体)

举例:自己定义人(people)的类。

a) 成员变量(属性,字段(field),全局变量)

1. 在方法的外部,类的内部声明。

2. 成员变量可以不赋初始值使用。

b) 局部变量。

1. 在方法的内部声明。

2. 必须赋初始值之后才能使用。

注意:简单来说,在哪个括号中声明的,可以在哪个括号中使用。

练习:编写学生(student)类 ,如下图(可以自由发挥,作为个人简历)

a) 格式: 类型对象名 = new 类型();

b) 作用: 在堆内存中创建一个类的对象。

c) 注意:

1. new 是关键字。

2. 自己声明的类也是一个类型。

3. 对象名必须是标识符。

4. 类型必须是引用数据类型,自己声明的所有的类都是引用数据类型。

用对象名。访问成员变量或方法。

例如: student s = new student();

= “张三修改学生的属性那么的值。

姓名:”+s);/输出学生的姓名。

调用学生类的print的方法,打印学生的所有信息。

student s1 = new student();

注: 1. s1中name的值是多少呢。

2. 每一个对象中的成员变量都有自己的存储空间。

3. 每一个对象都只能改变自己空间中的属性。

类与对象的关系。

类: student

对象 : s1 (学生1) s2 (学生2)

类:类可以看成是一类对象的模板。

类是抽象的概念,只是模板。

类只是对具体实物的抽象。

对象:对象是类的一个具体实例。

对象是实体。

对象是实际存在我们可观世界的实体。

a) 定义。

1. 方法与类同名。

2. 没有返回值(void是无返回值类型)

3. 可以用访问控制修饰符修饰。

b) 作用。

1. 用new + 构造方法创建一个对象,并执行构造方法中的**。

2. 可以通过构造方法给成员变量赋初始值。

c) 注意。

1. 可以理解为构造方法是由返回值得,调用构造方法返回一个当前类的对象。

2. 也可以叫构造函数。

3. new + 带参数的构造方法也可以创建一个对象。

4. 也可以直接写new +构造方法执行**。

a) 基本数据类型传递的是值,不能改变原来方法中局部变量的值。

b) 引用数据类型传递的是对象,可以改变对象中的值。

c) 不能改变对象的引用。

注:1. private , protected 不能修饰类。

2. 都可以修饰构造方法,限制构造方法的使用。

3. default 不能写出来。

面向对象是j**a的基本思想。

面向对象和面向过程都是编程语言的思想。

面向过程强调的是对象的行为。

面向对象是将功能封装起来,强调的是具有功能的对象。

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

面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。

面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。

封装:将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问

封装的思想:

1. 隐藏类的实现细节。

2. 迫使用户使用接口去访问。

3. 使**更好的维护。

如何封装。1. 修改属性的可见性,设为private

2. 创建getter和setter方法,便于读写属性。

3. 在方法中加入对属性的控制。

封装的好处。

什么是继承。

是指自然人死亡后,由法律规定的人或遗嘱指定的人依法取得死者遗留的个人合法财产的法律制度。(这是法律中的继承)

是j**a中一个类(子类)可以继承另外一个类(父类)中的所有的成员变量和方法。

继承的思想。

减少**的冗(rong)余,增加**的重用。

怎么继承。所有的鸟,鱼,家禽都属于是动物,应该拥有动物所有的属性和方法,所以应该继承动物所有的特征和行为 ,金鱼带鱼都属于是鱼,所以应该继承鱼类所有的特征和行为。

鱼继承动物 fish extends animal

鸟继承动物 bird extends animal

麻雀继承鸟 sparrow extends bird

带鱼继承鱼 hairtail extends fish

动物是鱼的父类(基类、超类)

鸟是动物的子类(派生类)

那带鱼能不能既继承鱼也继承动物呢?

不能,因为j**a只支持单继承。

继承的好处。

继承是传递的,在一些比较一般的类的基础上构造、建立和扩充新类的最有效的方法。

简化了人对事物的认识和描述,清晰体现相关类之间的层次结构关系。

继承提供了软件的重用功能,减少**和数据的冗余,大大增加了程序的重用性。

继承通过增强一致性,减少了模块之间的接口和界面,大大增加了程序的易维护性。

多重继承机制,一个类可以是多个类的父类,也可以从多个类中继承属性和方法,出于安全和可靠性的考虑,仅支持单重继承,通过接口机制来实现多重继承。

继承的例子。

上述例子表明:子类继承父类,子类可用使用父类中的成员,就像是子类自己的一样。

构造方法的特殊性。

构造方法不能被继承。

在调用子类构造方法的时候首先调用父类的构造再执行本类的构造方法。

重载。重载的定义:

同一个类中。

方法名相同。

参数不同。

返回值可以不一样。

重载的例子:

重写。重写的定义:

子类中。 方法名相同。

参数相同。

返回值相同。

不能有比父类有更严格的访问权限。

不能抛出比父类更多的异常。

重写的例子。

什么是多态。

多态顾名思义就是多种形态的意思。

一类的事物存在多种形态,不同的对象收到同一个消息可以产生完全不同的效果。

多态的前提。

继承。重写。

向上转型。多态的体现。

狗 g = new 狗();

例如:动物 dw = new 狗();

父类的引用指向子类的对象。

用户发送了一个通用的对象,实现的细节有接受对象自行决定。

对象的引用。

父类的引用指向子类对象,不能访问子类中特有的方法。

父类的引用只能访问父类的成员,但执行的是子类重写父类的成员。

多态的作用。

提高了程序的扩展性和后期的可维护性。

增强了软件的透明度,可理解性,可扩展性。

增强了灵活性和重用性。

多态是面向对象的重要思想,面向对象没有多态也就失去了色彩。

注意。存在继承或者实现。

存在重写方法。

强制转换。动物 dw = new 狗();可以将dw表示的对象转化为”狗”对象。

可以想象为是一个贴着动物标签的盒子中放一个狗对象。

不能任意转换类型,必须转换为对应的类型。

用关键字 instanceof(实例类型判断运算符) 判断是否是某个类型

实验1动物园有这些动物:狗、兔子等,饲养员每天都会给这些动物喂食,狗喜欢吃骨头、而兔子喜欢吃胡萝卜,通过j**a程序模拟饲养员喂食。

实验2a) this

b) super

1. super可以看成是一个变量,它的值代表的是当前对象父类的引用。

2. 可以在类的成员方法中表示父类对象。

3. 一般不在static**块中应用。

4. 在构造方法中第一句默认是的super() 必须放在第一行。

c) static

1. 用static修饰的方法叫做静态的方法,用static的修饰的变量是静态的变量,在系统加载类的时候,首先加载静态的变量和方法。

2. 静态的方法不能直接调用非静态的成员。

3. 非静态的可以直接访问静态的。

4. 静态的方法不需要所属类的任何实例引用,用类名。成员可以直接引用。

5. 非静态的仅限于实例引用。

d) package

1. j**a的包机制。

2. 用点来表示包的层次结构。

3. 必须放到j**a文件的第一行(在package关键字上面只能有注释和空白)

e) import

1. 导包关键字。

2. 引用不同包中的类必须导包。

3. 程序在执行的时候会自动加载包中的所有类,所以在用到lang包中的类的时候不用导包。

f) final

1. 用final修饰的变量不能被改变。

2. 用final修饰的方法不能被重写。

3. 用final修饰的类不能被继承。

抽象类的特点。

1. 抽象类用abstract修饰。

2. 抽象类不能直接实例化。

3. 抽象类中可以用main方法。

4. 用abstract修饰的方法是抽象的方法。

5. 抽象的方法只有声明,没有实现。

6. 有抽象方法的类必须是抽象类。

7. 抽象类一般作为其他类的父类。

8. 抽象类作为其他类的父类,抽象的方法必须重写。

9. 抽象类可以没有抽象的方法。

10面向对象的高级

static修饰的元素属于类。所有对象共享。static 属性放在静态池中。何为池 池是常驻内存,反复使用。static可以修饰属性,方法,语句块,内部类。可以用类名。调用。1 静态方法重写后还是静态方法。2 发生多态时,父类的引用如果调用重写的静态方法,调父类重写前的方法。类加载的 1 类名。时候...

面向对象的高级特性

选择题。1 给定下列 知识点 类的继承 1.class super class sub extends super 当在第6行加入什么方法时会引起编译错误?2 给定以下 知识点 接口多态 执行后的结果是?a.打印字符串 testedb.编译失败。c.运行成功但无输出 d.运行时抛出异常。3 max ...

面向对象实验

昆明理工大学信息工程与自动化学院学生实验报告。2012 2013学年第 2 学期 课程名称 软件工程开课实验室 信自楼445 时间 2013年 5月 31日。一 实验目的。1 明确动态建模中的四类图 状态机图 活 顺序图 通信图。2 学会这四种图的画法。二 实验原理及基本技术路线图 方框原理图 状态...