`
jamie.wang
  • 浏览: 347702 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Java how to program(Third Edition)——我的java手记(四)

 
阅读更多

第九章 面向对象的编程

1java不支持多重继承(像在C++语言中那样),但它支持“接口”概念。接口使java获得了多重继承的许多优点,屏弃了相应的缺点。

2.子类可以访问其超类的publicprotected和超类的包访问成员(即无权限修饰符的成员,且和它的超类在同一个包中),如果超类不允许通过继承的方式产生的子类访问它的某些成员,那么它必须以private方式声明该成员。超类的publicprotected成员将成为子类的publicprotected成员。子类不能继承超类的构造函数但子类的构造函数可以通过super引用来调用超类的构造函数。

3.对访问protected成员的保护限制介于对访问public成员的保护限制和对访问private成员的保护限制之间。只有超类的方法、子类的方法以及同一个包内的其他类的方法,才能访问超类的protected成员(protected成员可以进行包访问)。

4.实例分析

1)源代码

//超类Point2的定义point2.java

package Point;

public class Point2 {

protected int x,y;

//no-argument constructor,mast be included in the superclass,or will incur the compile error;

public Point2() {

setPoint(0,0);

}

//constructor

public Point2(int a,int b)

{ setPoint(a,b);}

public void setPoint(int a,int b)

{x=a;y=b;}

public int getX()

{return x;}

public int getY()

{return y;}

public String toString()

{return "["+x+","+y+"]";}

}

//子类Circle2的定义;circle2.java

package Point;

public class Circle2 extends Point2{

protected double radius;

//no-argument constructor

public Circle2() {

setRadius(0);

}

//constructor

public Circle2(double r,int a,int b){

super(a,b); //explict call to superclass constructor;

setRadius(r);

}

public void setRadius(double r)

{radius=(r>=0.0?r:0.0);}

public double getRadius(){return radius;}

public double area(){return Math.PI *radius*radius;}

public String toString()

{return "Center="+super.toString()+";Radius="+radius;}//call to superclass toString;

}

//测试主程序;InheritanceTest2.java

package Point;

import java.text.DecimalFormat ;

import javax.swing.JOptionPane ;

public class InheritanceTest2{

public static void main(String arg[]){

Point2 pointRef,p;

Circle2 circleRef,c;

String output;

p=new Point2(30,50);

c=new Circle2(2.7,120,89);

output="Point p:"+p.toString ()+"/nCircle:"+c.toString ();

pointRef=c; //assign circle to pointRef;

output+="/n/nCircle c(via pointRef):"+pointRef.toString (); /*Polymorphism and dynamic binding,so output the result using the funcion toString of Circle2 */

/*use downcasting(casting a superclass reference to a subclass data type)to assign pintRef to circleRef*/

circleRef=(Circle2)pointRef;

output+="/n/nCircle c(via circleRef):"+circleRef.toString ();

DecimalFormat precision2=new DecimalFormat("0.00");

output+="/nArea of c(via circleRef):"+

precision2.format (circleRef.area ());

if(p instanceof Circle2){ //judge if the object p is a object of Circle2;

circleRef=(Circle2)p;

output+="/n/ncast successfull";

}

else

output+="/n/np does not refer to a circle";

JOptionPane.showMessageDialog (null,output,

"Demostrating the /"is a/" relationship",

JOptionPane.INFORMATION_MESSAGE );

System.exit(0);

}

}

2)程序运行结果:

<shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"></shapetype><stroke joinstyle="miter"></stroke><formulas></formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f><lock aspectratio="t" v:ext="edit"></lock><shape id="_x0000_i1025" style="WIDTH: 243pt; HEIGHT: 153pt" type="#_x0000_t75"></shape><imagedata o:title="" src="file:///C:/DOCUME~1/haidao/LOCALS~1/Temp/msohtml1/01/clip_image001.png"></imagedata>

5.如果在你的类的层次结构中定义了finalize方法,子类finalize方法应该调用超类的finalize方法(形式:super.finalize();),以保证一个对象所有部分都能正常的终止。

6.引用子类对象可以被隐式地转换为引用超类对象,因为根据继承,子类对象“是一个”超类对象。而用子类引用引向超类对象是语法错误。

7.可以用final来定义方法和类,声明为final的方法不能在子类中被覆盖,声明为staticprivate的方法是隐式的fianl,因为fianl方法的定义永远不能改变,编译器按这种方式优化程序,即在所有出现final方法调用的地方用方法定义的扩展代码替换方法调用的语句——这种技术叫内联代码(inlining the code)。

声明为final的类不能是超类,即final类不能被继承,一个final类中的所有方法都是隐式的final

8.抽象类:一个永远也不需要实例化对象的类,它的作用是作为一个恰当的类,这样其他的类就可以继承接口或者实现。对象能被实例化的类叫具体类。抽象类用abstract声明。

9.一个接口的定义由关键字interface开始,并包括一套public abstract方法。接口也可以包含public final static数据。为使用接口;一个类必须声明它implement接口,而且必须定义接口中的每个方法,参数个数及返回类型还要与接口中定义的相同。

10java提供了一种称为内部类的机制,使类可以在其他类中定义,这样的类可以是完整的类定义或者是“无名内部类”定义。内部类主要用于GUI事件处理。

11.内部类定义要点

1)含内部类的类在编译时将为每个内部类生成一个独立的.class文件。有名字的内部类的文件名为“外部类名$内部类名.class”;无名内部类的文件名为“外部类名$#.class”,其中,#时编译器给每个无名内部类的编号,从1开始,依次递增。

2)具有类名的内部类可以定义为publicprotected,包访问或private,其使用限制和类的其他成员相同。

3)为了访问外部类的this引用,可使用“外部类名.this”。

4)外部类负责创建它的内部类的对象。为了创建另一个类的内部类的对象,首先创建这个外部类的一个对象,并把它赋值给一个引用(设为ref),然后可用下述形式的语句来创建内部类的对象:

外部类名.内部类名innerRef=ref.new内部类名();

5)内部类可以声明为staticstatic内部类不要求定义一个外部类的对象(但是非static内部类却要求这样)。static内部类不能访问外部类的非static成员。

分享到:
评论

相关推荐

    Java How to Program, Early Objects, 11th Edition, Deitel.pdf

    ### Java How to Program, Early Objects, 11th Edition #### 核心知识点概览 本书《Java How to Program, Early Objects, 11th Edition》由Deitel出版社出版,是一本面向初学者和有一定编程基础的学习者介绍Java...

    Java How To Program (late objects)

    ### Java How to Program (Late Objects) - 关键知识点解析 #### 一、书籍概述 《Java How to Program》(第十版,对象延迟版本)是一本经典的计算机编程教材,旨在为初学者提供系统全面的Java语言学习指导。本书...

    Java how to program 7th edition 英文原版第七版 Deitel & Deitel (2)

    国外经典教材 Java how to program 英文原版第七版 Deitel 父子名作 总共两个压缩卷 这是第二个

    Java How to Program, Early Objects, 11th Edition

    Java How to Program, Early Objects, 11th Edition Java How to Program, Early Objects, 11th Edition Java How to Program, Early Objects, 11th Edition Java How to Program, Early Objects, 11th Edition

    Java How To Program (Fourth Edition)

    ### Java How to Program (Fourth Edition) - 关键知识点解析 #### 一、基本计算机科学概念的理解 - **计算机科学基础**: 本章节首先介绍了计算机科学的基本概念,包括计算机硬件、软件以及它们之间的交互方式。 - ...

    Java How To Program Ninth Edition

    《Java How To Program Ninth Edition》是一本专注于Java编程的详细教程,由知名作者Harvey & Paul Deitel编著,特别适合初学者至进阶者学习。该书共分为30个章节,涵盖了从基础语法、面向对象编程概念到高级主题的...

    Java How to Program(9th Edition)

    总的来说,《Java How to Program(9th Edition)》是一本全面的Java学习指南,它涵盖了从基础到进阶的所有关键主题,旨在帮助读者成为一名熟练的Java程序员。通过阅读这本书,你不仅能学到扎实的编程技能,还能了解...

    Java How to Program, 7th Edition-Prentice Hall

    《Java如何编程,第7版-Prentice Hall》由Harvey M. Deitel和Paul J. Deitel联合撰写,是Java编程领域的一本经典教材,涵盖了Java语言的基础知识和一些进阶话题。该书不仅适合初学者,也适合作为有经验的程序员的...

    Java how to program 7th edition 英文原版第七版 Deitel & Deitel (1)

    国外经典教材 Java how to program 英文原版第七版 Deitel 父子名作 总共两个压缩卷 这是第一个

    Java大学教程(Java How to Program)(第四版)中文版 pdf

    本书以初学者为起点,循序渐进地介绍了面向对象的Java编程语言,系统地讨论了Java的基本概念和编程技术。全书共分为18章,首先从基本的Java理论开始,讲解了Java的基本数据类型和控制结构,Java中的方法、数组和字符...

    Java How to Program, Early Objects, 10th Edition, Deitel 2015.pdf

    ### Java How to Program, Early Objects, 10th Edition (Deitel 2015) 知识点解析 #### 一、书籍介绍与特点 《Java How to Program, Early Objects, 10th Edition》是由Deitel出版社出版的专业Java编程教材。本书...

    Java How to Program

    ### Java How to Program #### 书籍概述 《Java How to Program》是一本深入浅出介绍Java编程语言的经典教材,由Deitel & Associates, Inc.出版。该书采用独特的“实战代码”方法,提供了大量的实际运行代码示例,...

    java how to program 9 edition

    ### Java How to Program 9th Edition - 关键知识点解析 #### 教材概述与作者介绍 《Java How to Program》第九版是一本经典的Java编程入门教材,在全球范围内被多所大学采用作为Java教学的主要参考资料。本书由...

    C++ How to Program, 10th Edition

    C++ How to Program (10th Edition) By 作者: Harvey M. Deitel Paul Deitel ISBN-10 书号: 9332585733 ISBN-13 书号: 9789332585737 Edition 版本: 10th 出版日期: 2017 Format: Paperback C++ How to Program ...

    JAVA How to Program(the sixth edition)

    Introduction to Java Applications Chapter 3. Introduction to Classes and Objects Chapter 4. Control Statements: Part I Chapter 5. Control Statements: Part 2 Chapter 6. Methods: A Deeper Look Chapter ...

    Java How to Program, Sixth Edition

    Java How to Program, Sixth Edition

    Visual C# 2008 How to Program 3rd Edition答案 英文版

    Visual C# 2008 How to Program 3rd Edition答案,英文版的。

Global site tag (gtag.js) - Google Analytics