当前位置:编程学习 > JAVA >>

java程序设计与问题解决(基础篇)-读书笔记-6

 

如果派生类定义了一个方法,这个方法和基类中的一个方法的名字和特征标相同,则称这个方法重写(override)了基类中的方法定义

 

指定某个方法定义不能被派生类用新的定义重写,可以在方法的头部添加final修饰符

public final void specialMethod()

{…}

被声明为final的方法编译器会为之生成更高效的代码,可以认为声明为final的方法为非虚方法(Java默认方法是虚方法),从而不用进行动态绑定,当然代码更高效

 

整个类可以被声明为final,这样它就不能被用作基类来派生任何类了。

 

不能在任何别的类的方法定义中通过名字来访问基类中的私有实例变量或方法,就算是派生类中的方法定义也不行

 

私有方法应当作为辅助方法使用,其应用应该限于定义它们的类本身

 

用关键字super来调用基类的构造器,而不能像C++一样

super的一些规则:它必须是构造器中的第一个动作,此后就不能使用,如果在构造器中没有调用基类的构造器,Java会自动添加对基类的默认构造器的调用作为派生类的第一个动作

 

super还可以用来调用基类中被派生类重写的方法

 

定义构造器时,另一种常见的方式是调用同一个类的其他构造器,可以类似super那样使用关键字this,调用同一个类的构造器,而不是基类的构造器

 

多重super,也就是super.super.writeOutput();这样的序列是不允许的

 

关于重载和重写的一个微妙之处的例子,参考p381

 

一个对象可以有多个类型,派生类的对象具有所有祖先类的类型

 

在Java中,每个类都是Object类的派生类,一次每个类的对象都具有Object类型。如果没有把类作为其他类的派生类,Java就会自动把它作为Object类的派生类

每个类都直接或者间接从Object类继承了方法equals、toString与clone,不过这两个方法一般需要重新定义

 

若有方法希望被派生类重写而且只被派生类的对象调用,则可以把该方法声明为抽象的

public abstract void drawHere();

如果类有至少一个抽象方法,这个类就必须被声明为抽象的

public abstract class Figure{…}

 

如果方法总是会被重写而使得这个方法的定义没有意义,那就把它设为抽象方法,这样就不需要写这个无意义的方法

 

抽象方法没有一个完整的定义,它是方法的占位符,该方法必须在所有的(非抽象的)派生类中被定义

 

接口是抽象类的极端形式,它太极端以至于它不是一个类,然后它是一个类型,任何实现了该接口的类都具有该类型

public interface XX

{…}

 

实现多个接口的形式:implememts Myinterface, YourInterface

 

接口是一个类型,方法可以用接口类型作为参数,这样,方法就可以作用于其后定义的、实现该接口的类了。接口的作用类似于基类,但是必须强调的是它不是一个基类(不是类)

 

Java中的派生类只能有一个基类,但是在基类之外,Java类可以实现任意多的接口,这使Java程序能有近似与多重基类的能力,但是又避免了多重基类带来的复杂性

 

Java自动进行动态绑定,这与C++不同,这也是Java的效率低于C++的一个原因,但这也使得Java更易于编程而不容易出错

 

动态绑定会导致方法的“间接重写”

 

Java善于发现应当使用哪个方法定义,甚至强制类型转换也欺骗不了它(p400)

 

变量(静态类型)决定哪些方法可以使用,但是对象(动态类型)决定了会使用这些方法名的哪个版本

 

System.out.println方法的一个实现版本如下:

public void println(Object theObject)

{

       System.out.println(theObject.toString)

}

所以如果一个类实现了toString方法,有这个类对象a,则System.out.println(a)等价于System.out.println(a.toString())

 

applet是Japplet类的派生类

 

为了获得GUI以便作为普通的Java应用程序来运行,需要使用Jframe作为基类

 

applet的关闭窗口按钮其实不是applet自己的关闭窗口按钮,而是属于查看程序的,所以用applet时不需要对这个关闭窗口按钮编程,而使用Jframe时需要

 

关闭窗口按钮时产生一个窗口事件,被窗口侦听器(例如WindowAdapter的派生类)捕获

使用addWindowListener方法可以把窗口侦听器注册到Jframe的GUI中,这与对Jbutton使用addActionListener完全类似

 

WindowAdapter(派生)类不是标准Java库中的类,其子类需要自行定义,比较简单的实例如(p408)

 

ActionListener是一个特殊的接口,这个接口只有一个方法头部actionPerformed,某个动作侦听器必须实现该ActionListener接口

 

JFrame和所有从JFrame派生的类都有一个paint方法,和applet一样,可以重写Jframe GUI的paint方法来画图

 

作者 yucan1001

补充:软件开发 , Java ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,