第一章 对象

本文介绍了面向对象编程的核心概念,包括对象、类、接口、继承、多态等,并探讨了对象的创建与生命周期管理,以及如何利用容器和参数化类型来提高代码的灵活性与安全性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.1面向对象的特征:

万物皆可为对象。

程序是对象的集合,它们通过发消息来告知彼此要做的。消息就是对特定对象方法的调用。

可以通过创建包含现有对象的包的方式来创建新类型的对象。

每个对象都有其类型,“类型”就是“类”。类之间的区别就是:可以接受的消息不同。

同一类的对象可以接受同样的消息。


1.2类的接口

“请求”就是调用对象的接口(方法)


1.3

对象是“服务提供者”。程序本身向用户提供服务,它通过调用其他对象的服务来实现。

你的目标就是去创建(从库里找)理想的对象。


1.4隐藏具体实现

public:任何人

private:类创建者和类的内部方法,隔开了客户端程序员

protected:和private差不多,+继承的类可以访问

默认访问权限(包访问权限):同一个包内的可以访问


1.5复用

复用方式:1.直接使用该类的一个对象 2.把这个对象放到一个新类中(创建成员对象)

组合:使用现有类合成新的类,汽车拥有引擎。在建立新类是应首先考虑组合,而不是继承


1.6 继承

几何形(圆形,正方形)

继承现有类型就创造出了新类型:子类包括父类所有成员(private不可访问,protected可以),所有可以发给父类对象的消息

也可以发给子类。

子类和父类有相同的基本接口,有两种方法使两者产生差异:添加新方法,重写(接口一样,实现不同)


用“是一个”关系:“一个圆是一个几何图形”(不添加新方法),这就是替代原则

“像一个”关系(子类添加了新方法,父类无法访问)


1.7多态

为什么调用move()时也会产生正确的goose.move()或penguin.move()?为什么对象会依据自己的具体类型来执行恰当的代码呢?

Java默认后期绑定


调用draw()时,会基于()里的对象的类型产生合适的行为


1.8单根继承结构:所有类都继承自一个单一的基类

object

这样所有对象都具备某些功能,便于进行系统级操作


1.9容器

容器可以在任何需要时都可以扩充自己以容纳你置于其中的东西.

list, map, set, 队列, 树, 堆栈等


参数化类型

java SE5之前,容器中存储的是object,所以将对象放入容器时,它必须向上转型为object,因此它会丢失其身份。将它取回时,得到的是一个object的引用。想要得到原来的类型就要向下转型,而这不一定安全

创建知道自己所保存的对象类型,从而不需要向下转型,就是参数化类型。这样,编译器可以定制一个只接纳和取出shape的容器

java SE5增加了参数化类型,java中称为范型。<shape>


1.10对象的创建和生命周期

怎样才能知道何时销毁这些对象呢?当处理完某个对象之后,系统某个其他部分可能还在处理它。


对象数据置于何处?怎样控制对象的生命周期?

1.将对象置于堆栈或静态存储区域,存储空间和生命周期可以在编写程序时确定

(Java)2.在堆中动态创建对象。上述问题到运行时才能确定。如果需要一个新对象,可以在需要的时刻直接在堆中创建。速度会比1慢不少


在堆上创建对象,编译器就会对它的生命周期一无所知。好在Java提供了垃圾回收机制,可以自动发现对象何时不再被使用,并继而销毁它。


1.11















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值