Java编程思想第四版——第二十天

Java编程思想第四版——第二十天

第7章 复用类

复用代码是java众多引人注目的功能之一。

Java中所有事物,问题解决都是围绕着类展开的。可以通过创建新类来服用代码,而不必再重头开始编写,可以使用别人业已开发并调试好的类。此方法的窍门在于使用类而不破坏现有程序代码。两种达到此目的的方法:第一种:只需在新的类中产生现有类的对象,称为组合。复用了现有程序代码的功能,而非它的形式。第二种:按照现有类的类型来创建新类,无需改变现有类的形式,采用现有类的形式并在其中添加新代码,称为继承。编译器可以完成其中大部分工作。继承是面向对象程序设计的基石之一。

组合和继承,语法和行为大多是相似的。

7.1 组合语法

组合技术,只需将对象引用置于新类中即可。

每一个非基本类型的对象都有一个toString()方法

编译器不是简单的为每一个引用都创建默认对象。

初始化引用:

在定义对象的地方,这意味着他们总是能够在构造器被调用之前被初始化。

在类的构造器中。

就在正要使用这些对象之前,这种方式称为惰性初始化。在生成对象不值得及不必每次都生成对象的情况下,这种方式可以减少额外的负担。

使用实例初始化。

7.2 继承语法

继承是所有OOP语言和java语言不可缺少的组成部分。创建一个类时,总是在继承,除非已明确指出要从其他类中继承,否则就是在隐式地从java的标准根类Object进行继承。

组合的语法比较平实,但是继承使用的是一种特殊的语法。继承过程中,需要先声明“新类与旧类相似”。这种声明是通过在类主体的左边花括号之前,书写后面紧随基类名称的关键字extends而实现的。这么做时,自动得到基类中所有的域和方法。

可以为每个类都创建一个main()方法,使每个类的单元测试都变得简便易行。完成单元测试之后,无需删除,可以留待下次测试。即使一个程序含有多个类,只有命令行所调用的那个类的main()方法会被调用,不管含有main()方法的类是不是public的。一个类只具有包访问权限,其public main()仍然是可访问的。

为了继承,一般的规则是将所有的数据成员都指定为private,将所有的方法指定为public(protected成员也可以借助导出类来访问)。但在特殊情况下,必须做出调整。

可用将继承视作是对类的复用。

Java用super关键字表示超类的意思,当前类就是从超类继承来的。

在继承的过程中,并不一定非得使用基类的方法,也可以在导出类中添加新方法,其添加方式与在类中添加任意方法一样,即对其加以定义即可。

7.2.1 初始化基类

当创建了一个导出类的对象时,该对象包含了一个基类的子对象。这个子对象与用基类直接创建的对象是一样的。二者区别在于,后者来自于外部,而基类的子对象被包装在导出类对象内部。

对基类子对象的正确初始化是至关重要的,仅有一种方法来保证这一点:在构造器中调用基类构造器来执行初始化,而基类构造器具有执行基类初始化所需要的所有知识和能力。Java会自动在导出类的构造器中插入对基类构造器的调用。

构建过程是从基类“向外”扩散的,所以基类在导出类构造器可以访问它之前,就已经完成了初始化。即使不创建构造器,编译器也会合成一个默认的构造器,该构造器将调用基类的构造器。

带参数的构造器:

如果没有默认的基类构造器,或者想调用一个带参数的基类构造器,就必须用关键字super显式地编写调用基类构造器的语句,并且配以适当的参数列表。调用基类构造器必须是在导出类构造器中药做的第一件事(如果错了,编译器会提醒)。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgfzyz.html