java面向对象设计原则

零基础学习Java编程需要知道的十二个步骤!

一、学习前的准备工作

java语言一般用于大型的服务器程序开发,所有有必要了解如下内容:Unix开发环境Unix系统原理、Unix开发环境、Unix常用命令。熟练掌握Unix常用命令;熟练构建下的Java开发环境。

 

二、Java语言基础的学习阶段学习

任何一门语言都要打好基础,曾经学过高级程序语言(C,C++等)来说,java语言基础有自己的特点,但是基本规律都是相通的,如:算法基础、常用数据结构、企业编程规范。掌握常见的数据结构和实用算法;培养良好的企业级编程习惯。

三、面向对象语言的共性

Java面向对象面向对象特性:封装、继承、多态等。掌握面向对象的基本原则以及在编程实践中的意义;掌握Java面向对象编程基本实现原理。

 

 四、JDK核心API语言核心包、异常处理、常用工具包、集合框架

熟练掌握JDK核心API编程技术;理解API设计原则;具备熟练的阅读API文档的能力;JavaSE核心异常处理、多线程基础、IO系统、网络编程、Swing组件、JVM性能调优(JVM内存结构剖析、GC分析及调优、JVM内存参数优化)、Java泛型、JDK新特性。熟练掌握JavaSE核心内容,特别是IO和多线程;初步具备面向对象设计和编程的能力;掌握基本的JVM优化策略。XMLXML语法、XML解析(SAX、DOM)、Dom4j组件、Digester组件。熟练掌握XML语法规则;理解DOM模型;熟悉Java对XML的各种解析方式。

五、SQL语言SQL语句基础和提高、SQL语句调优

熟练的掌握SQL语句;掌握一定的数据库查询技巧及SQL语句优化技巧。Oracle数据库开发Oracle体系结构及系统管理、Oracle数据库高级编程、数据库设计基础。掌握Oracle体系结构及核心编程技术。

 

六、连接数据库:JDBCJDBC核心API(Connection、Statement、ResultSet)、JDBC优化技术(缓存技术、批处理技术、连接池技术)

理解JDBC作为规范的设计原则;熟练掌握JDBCAPI;具备使用JDBC对数据库进行高效访问的能力。

 

七、软件工程基础软件过程和软件活动

需求设计、概要设计、详细设计基本原则和文档规范;配置管理的基本概念和必要性;CVS基本操作;Ant简介理解软件过程的普遍概念和基本的软件活动;理解迭代的意义;掌握Ant、CVS等常用配置管理及部署工具。

 

八、OOAD及设计模式面向对象基本设计原则、工厂模式、策略模式、适配器模式、代理模式等、门面模式

理解面向对象设计的一般原则;理解重用的意义;掌握常见的设计模式。

 

九、HTML/CSSHTML基本文档结构、掌握CSS基础语法、关于HTML文档块、链接、列表、表格、表单等

掌握

 

十、Ajax基础、XHR对象、Ajax设计模式、JSON技术

掌握Ajax的基本通信原理;掌握基于XML和JSON的Ajax数据规则。

 

十一、JavaScript框架JQuery、JQuery插件、DWR

掌握JQuery核心API;了解JQuery基本设计原则;了解多种JQuery插件;掌握DWR的基本原理及应用技巧。

 

十二、ssh三大框架的学习

这是企业实际应用的框架模型:

1,Struts2.1.6Struts2核心控制流程、Ognl、Action、Interceptor、,Result、FreeMarker、Struts2标记库、Struts2扩展、Struts2应用技巧(输入验证、消息国际化、文件上传和下载、防止重复提交等)。熟练掌握Struts2核心要件,特别是Interceptor和Result;掌握基于模板技术的Struts2UI组件;掌握基于Ognl的数据共享方式、掌握Struts2各种定制及扩展方式;熟练掌握基于Struts2的Web开发技巧。

2,Hibernate3.2.1ORM概念、Hibernate核心API、Hibernate实体映射技术、Hibernate关系映射技巧、HQL查询、OSCache及Hibernate缓存技术。重点掌握Hibernate多种关联映射技巧及其实用背景,做到在合适的时候使用合适的关联方式;掌握多种Hibernate查询技巧及优化技术。

3,Spring2.5SpringIoc基础、Ioc注入技巧、对象高级装配(自动装配、模板装配、组件扫描特性、FactoryBean、对象生命周期)、SpringAOP原理、AspectJ、SpringJDBC支持、Spring事务及安全管理;Spring整合Hibernate、Spring整合Struts、SpringMVC简介。深入理解Ioc和AOP的基本原理和实现方式;熟练掌握SpringIoc及AOP实现方式;熟练掌握Spring事务管理;熟练掌握Spring与其他组件的整合技术。

 

JAVA面向对象设计有哪些原则

甚至还有经验丰富的Java程序员没有听说过OOPS和SOLID设计原则,他们根本不知道设计原则的好处,也不知道如何依照这些原则来进行编程。 众所周知,Java编程最基本的原则就是要追求高内聚和低耦合的解决方案和代码模块设计。查看Apache和Sun的开放源代码能帮助你发现其他Java设计原则在这些代码中的实际运用。Java DevelopmentKit则遵循以下模式:BorderFactory类中的工厂模式、Runtime类中的单件模式。 原则1:DRY(Don’trepeatyourself) 即不要写重复的代码,而是用“abstraction“类来抽象公有的东西。如果你需要多次用到一个硬编码值,那么可以设为公共常量;如果你要在两个以上的地方使用一个代码块,那么可以将它设为一个独立的方法。SOLID设计原则的优点是易于维护,但要注意,不要滥用,duplicate不是针对代码,而是针对功能。这意味着,即使用公共代码来验证OrderID和SSN,二者也不会是相同的。使用公共代码来实现两个不同的功能,其实就是近似地把这两个功能永远捆绑到了一起,如果OrderID改变了其格式,SSN验证代码也会中断。因此要慎用这种组合,不要随意捆绑类似但不相关的功能。 原则2:封装变化 在软件领域中唯一不变的就是“Change“,因此封装你认为或猜测未来将发生变化的代码。OOPS设计模式的优点在于易于测试和维护封装的代码。如果你使用Java编码,可以默认私有化变量和方法,并逐步增加访问权限,比如从private到protected和notpublic.有几种Java设计模式也使用封装,比如Factory设计模式是封装“对象创建“,其灵活性使得之后引进新代码不会对现有的代码造成影响。 原则3:开闭原则 即对扩展开放,对修改关闭。这是另一种非常棒的设计原则,可以防止其他人更改已经测试好的代码。理论上,可以在不修改原有的模块的基础上,扩展功能。这也是开闭原则的宗旨。 原则4:单一职责原则 类被修改的几率很大,因此应该专注于单一的功能。如果你把多个功能放在同一个类中,功能之间就形成了关联,改变其中一个功能,有可能中止另一个功能,这时就需要新一轮的测试来避免可能出现的问题。 原则5:依赖注入或倒置原则 这个设计原则的亮点在于任何被DI框架注入的类很容易用mock对象进行测试和维护,因为对象创建代码集中在框架中,客户端代码也不混乱。有很多方式可以实现依赖倒置,比如像AspectJ等的AOP(AspectOrientedprogramming)框架使用的字节码技术,或Spring框架使用的代理等。 原则6:优先利用组合而非继承 如果可能的话,优先利用组合而不是继承。一些人可能会质疑,但我发现,组合比继承灵活得多。组合允许在运行期间通过设置类的属性来改变类的行为,也可以通过使用接口来组合一个类,它提供了更高的灵活性,并可以随时实现。《EffectiveJava》也推荐此原则。 原则7:里氏代换原则(LSP) 根据该原则,子类必须能够替换掉它们的基类,也就是说使用基类的方法或函数能够顺利地引用子类对象。LSP原则与单一职责原则和接口分离原则密切相关,如果一个类比子类具备更多功能,很有可能某些功能会失效,这就违反了LSP原则。为了遵循该设计原则,派生类或子类必须增强功能。 原则8:接口分离原则 采用多个与特定客户类有关的接口比采用一个通用的涵盖多个业务方法的接口要好。设计接口很棘手,因为一旦释放接口,你就无法在不中断执行的情况下改变它。在Java中,该原则的另一个优势在于,在任何类使用接口之前,接口不利于实现所有的方法,所以单一的功能意味着更少的实现方法。 原则9:针对接口编程,而不是针对实现编程 该原则可以使代码更加灵活,以便可以在任何接口实现中使用。因此,在Java中最好使用变量接口类型、方法返回类型、方法参数类型等。《EffectiveJava》和《headfirstdesignpattern》书中也有提到。 原则10:委托原则 该原则最典型的例子是Java中的equals()和hashCode()方法。为了平等地比较两个对象,我们用类本身而不是客户端类来做比较。这个设计原则的好处是没有重复的代码,而且很容易对其进行修改。 总之,希望这些面向对象的设计原则能帮助你写出更灵活更好的代码。理论是第一步,更重要的是需要开发者在实践中去运用和体会。

北大青鸟设计培训:Java面向对象的四个特征

1.抽象:抽象——就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。
(就是把现实世界中的某一类东西,提取出来,用程序代码表示,抽象出来一般叫做类或者接口。
)抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。
贵州java培训

北大青鸟java培训:程序员需要了解的10个面向对象设计

面向对象设计原则是OOPS编程的核心,学习面向对象编程像“抽象”、“封装”、“多态”、“继承”等基础知识是重要的,但同时为了创建简洁、模块化的设计,了解这些设计原则也同等重要。
(设计原则)底线是永远追求高内聚、低耦合的编码或设计。
Apache和Sun的开源代码是学习和OOPS设计原则的良好范例。
它们向我们展示了,设计原则在编程中是如何使用的。
JDK使用了一些设计原则:BorderFactory类中的工厂模式、Runtime类中的单例模式、.io类中的装饰器模式。
顺便说一句,如果您真的对编码原则感兴趣,请阅读JoshuaBloch的Effective,他编写过API。
我个人最喜欢的关于面向对象设计模式的是KathySierra的HeadFirstDesignPattern(深入浅出设计模式),以及其它的关于深入浅出面向对象分析和设计。
这些书对编写更好的代码有很大帮助,充分利用各种面向对象和SOLID的设计模式。
虽然学习设计模式(原则)最好的方法是现实中的例子和理解违反设计原则带来的不便,本文的宗旨是向那些没有接触过或正处于学习阶段的程序员介绍面向对象设计原则。
DRY_Don’trepeatyourself我们第一个面向对象设计原则是:DRY,从名称可以看出DRY(don’trepeatyourself)意思是不写重复代码,而是抽象成可复用的代码块。
如果您有两处以上相同的代码块,请考虑把它们抽象成一个单独的方法;或者您多次使用了硬编码的值,请把它们设置成公共常量。
这种面向对象设计原则的优点是易于维护。
重要的是不要滥用此原则,重复不是针对代码而是针对功能来说。
它的意思是,如果您使用通用代码来验证OrderID和SSN,这并不意味着它们是相同的或者他们今后将保持不变。
通过把通用代码用于实现两种不同的功能,或者您把这两种不同的功能密切地联系在一起;当您的OrderID格式改变时,您的SSN验证代码将会中断。
所以要当心这种耦合,而且不要把彼此之间没有任何关系却类似的代码组合在一起。
封装经常修改的代码EncapsulateWhatChanges在软件领域永远不变的是“变化”,所以把您认为或怀疑将来要被修改的代码封装起来。
这种面向对象设计模式的优点是:易于测试和维护恰当封装的代码。
如果您在用编程,那么请遵守以下原则:变量和方法的访问权限默认设置为私有,并且逐步放开它们的访问权限,例如从“private”到“protected”、“notpublic”。
中的一些设计模式使用了封装,工厂设计模式就是一个例子,它封装了创建对象的代码而且提供了以下灵活性:后续生成新对象不影响现有的代码。
打开/关闭设计原则OpenClosedDesignPrinciple类、方法/函数应当是对扩展(新功能)开放,对修改闭合。
这是另外一个优雅的SOLID设计原则,以防止有人修改通过测试的代码。
理想情况下假如您添加了新功能,那么您的代码要经过测试,这就是打开/关闭设计原则的目标。
顺便说一句,SOLID中的字母“O”指的是打开/关闭设计原则。
单一职责原则SingleResponsibilityPrinciple(SRP)单一职责原则是另外一个SOLID设计原则,SOLID中的字母“S”指的就是它。
按照SRP,一个类修改的原因应当有且只有一个,或者一个类应当总是实现单一功能。
如果您在中的一个类实现了多个功能,那么这些功能之间便产生了耦合关系;如果您修改其中的一个功能,您有可能就打破了这种耦合关系,那么就要进行另一轮测试以避免产生新的问题。
依赖注入/反转原则DependencyInjectionorInversionprinciple不要问框架的依赖注入功能将会给你带来什么益处,依赖注入功能在spring框架里已经很好的得到了实现,这一设计原则的优雅之处在于:DI框架注入的任何一个类都易于用模拟对象进行测试,并且更易于维护,因为创建对象的代码在框架里是集中的而且和客户端代码是隔离的。
有多种方法可以实现依赖注入,例如使用字节码工具,其中一些AOP(面向切面编程)框架如切入点表达式或者spring里使用的代理。
想对这种SOLID设计原则了解更多,请看IOC和DI设计模式中的例子。
SOLID中的字母“D”指的就是这种设计原则。
优先使用组合而非继承ForCompositionoverInheritance如果可以的话,要优先使用组合而非继承。
你们中的一些人可能为此争论,但我发现组合比继承更有灵活性。
组合允许在运行时通过设置属性修改一个类的行为,通过使用多态即以接口的形式实现类之间的组合关系,并且为修改组合关系提供了灵活性。
甚至Effective也建议优先使用组合而非继承。
里氏替换原则LiskovSubstitutionPrincipleLSP根据里氏替换原则,父类出现的地方可以用子类来替换,例如父类的方法或函数被子类对象替换应该没有任何问题。
LSP和单一职责原则、接口隔离原则密切相关。
如果一个父类的功能比其子类还要多,那么它可能不支持这一功能,而且也违反了LSP设计原则。
为了遵循LSPSOLID设计原则,派生类或子类(相对父类比较)必须增强功能,而非减少。
SOLID中的字母“L”指的就是LSP设计原则。
接口隔离原则接口隔离原则指,如果不需要一个接口的功能,那么就不要实现此接口。
这大多在以下情况发生:一个接口包含多种功能,而实现类只需要其中一种功能。
接口设计是一种棘手的工作,因为一旦发布了接口,您就不能修改它否则会影响实现该接口的类。
在中这种设计原则的另一个好处是:接口有一个特点,任何类使用它之前都要实现该接口所有的方法,所以使用功能单一的接口意味着实现更少的方法。
编程以接口(而非实现对象)为中心编程总是以接口(而非实现对象)为中心,这会使代码的结构灵活,而且任何一个新的接口实现对象都能兼容现有代码结构。
所以在中,变量、方法返回值、方法参数的数据类型请使用接口。
这是许多程序员的建议,Effective以及headfirstdesignpattern等书也这样建议。
代理原则不要期望一个类完成所有的功能,电脑培训

java中面向对象设计原则有哪些

开闭原则:
这一条放在第一位来理解,它的含义是对扩展开放,对修改关闭。解释一下就是,我们写完的代码,不能因为需求变化就修改。我们可以通过新增代码的方式来解决变化的需求。

在JAVA中什么是面向对象的程序设计方法有哪些主要特征

答:Java是面向对象的程序设计语言,从面向对象这个角度看,体现了如下三个特点:

①封装性

面向对象的程序设计语言都是把数据和处理数据的操作结合在一起而构成一个整体,这就是对象。对象的使用者只能看到对象的外部特性,比如,其主要功能、如何调用等,而看不到内部如何实现这些功能。作为面向对象的程序设计语言,程序中的数据就是变量,程序对数据作处理则称为方法。变量和方法都被封装在对象中。所以,一个对象就是变量和方法的集合,其中变量表明这个对象的状态,方法实现这个对象所具有的行为,而且在程序中将这些变量和方法进行封装,使它们成为一个模块,再用一个名字来代表这个模块。这样,以后的更高层的程序设计中,就不必关心某个对象的行为到底是怎样实现的。可见,将对象封装就是为了使模块尽可能少地展现其内部细节,而只是以一种界面来面向外部。

对象的封装性减少了程序各部分之间的依赖,使程序的复杂性降低,而可靠性提高,并便于修改。
②继承性

面向对象的程序设计中,对象是从类创建出来的,这一点即将在下面的解答中说明。在
Java中,许多类组成层次化结构。一个类的上一层称为父类,而下一层称为子类。一个类可以继承其父类的变量和方法,而且这种继承具有传递性。就是说,一个类可以继承其上一层和其再上一层的变量和方法。这种可传递的继承性使得下层多个相似的对象可以共享上层类的数据和程序代码,而子类又可以在继承父类的基础上增添新的内容和功能。这种代码共享和代码可增添的继承特性使Java既灵活方便又提高效率。
③通信相关性

一个对象往往涉及多个行为。体现在程序设计中,一个对象往往包含多个方法,每一个方法对应一个行为。所以,一个对象完成某个动作也就是程序执行相应的方法。于是,就涉及对象之间通过交互来实现复杂的行为,这叫对象之间的通信。

利用通信可以实现一个对象往另一个对象的信息传递。信息传递涉及三个要素;一是信息接收对象;二是接收对象中用哪个方法完成指定的动作;三是此方法需要的参数。由于信息传递的要素非常清晰,所以用在编程中也将很方便。

这种通信相关性使许多复杂功能得以实现,却又能避免编程的错综复杂。

java什么是面向对象编程思想

面向对象思想是相对于C语言中的面向过程编程思想。我们用java做一件事,只用去new一个对象,并且去调用这个对象的方法,就可以实现我们所要的业务,而这个对象的具体方法做了什么,具体过程,我们就不用去关注了!这就是面向对象编程思想。

北大青鸟设计培训:java面向对象

类和对象static关键字修饰的方法/变量属于该类,没有用static修饰的,属于该类的实例即对象。
 类和对象  static关键字修饰的方法/变量属于该类,没有用static修饰的,属于该类的实例即对象。
  类方法/变量由类调用,成员方法/变量由实例调用。
  this 总是指向调用该方法的对象(不是类)。
方法详解  方法所属性(static决定)  形参,实参的传递(值传递,注意引用变量传递的区别)  形参个数可变(…放在形参类型后)  方法的重载(返回值不同或者形参个数不同)  递归方法成员变量和局部变量  package程序第一行,只能一个  import导入指定包层次下某个类或全部类  importstatic静态导入用于导入指定类的某个静态成员变量、方法或全部的静态成员变量、方法。
构造器  构造器最大的用处就是在创建对象时执行初始化  构造器重载(形参列表不同)  构造器调用另一个构造器需使用this关键字,而且必须作为构造器执行体的第一条语句。
类的继承  Java子类不能获得父类的构造器  重写父类的方法要遵循“两同两小一大”的规则。
两同:方法名、形参列表相同;两小:返回值类型,抛出异常类;一大:访问权限。
(重写方法,覆盖方法和被覆盖方法要同时为实例方法,或者类方法)  super在子类中调用父类被覆盖方法;在子类中调用父类构造器。
多态  相同类型的变量、调用同一个方法时呈现出多种不同的行为特征,就是多态。
  java允许将子类对象直接赋给父类引用变量。
(向上转型upcasting)  编译时类型转换成运行时类型,需要强制类型转换,要借助于类型转换运算符。
  instanceof:前一个操作数通常是一个引用类型变量,后一个通常是一个类或者接口。
四川北大青鸟

学习Java具体都要学什么内容

目前java学习除了在高校的专业中学习,还有自学和报班学习两种途径,根据每个人的情况最合适的学习方式是不同的。学习java只要掌握好方式和方法,其实学起来并不是非常难。

java学的内容主要有:

①JAVA编程基础(基础语法、面向对象、和谐特性等)

②WEB应用开发(静态网页制作、Oracle数据库、Java Web开发技术、Linux技术、网站性能与安全、软件工程开发流程、Java Web和谐等)

③企业级框架开发(数据结构与算法、SSH框架、JavaEE和谐等)

④项目实训

你可以考察对比一下开设有IT专业的热门学校,好的学校拥有根据当下大型企业需求自主研发课程的能力,建议实地考察对比一下。祝你学有所成,望采纳。

Java 面向对象理解

 java语言中有三个典型的面向对象的特性:封装性、继承性和多态性。1. 封装性
  java语言中,对象就是对一组变量和相关方法的封装,其中变量表明了对象的状态,方法表明了对象具有的行为。通过对象的封装,实现了模块化和信息隐藏。通过对类的成员施以一定的访问权限,实现了类中成员的信息隐藏。
◇ java类中的限定词
  java语言中有四种不同的限定词,提供了四种不同的访问权限。
  1) private
  类中限定为private的成员,只能被这个类本身访问。
  如果一个类的构造方法声明为private,则其它类不能生成该类的一个实例。
  2) default
  类中不加任何访问权限限定的成员属于缺省的(default)访问状态:friend,可以被这个类本身和同一个包中的类所访问。
3) protected
  类中限定为protected的成员,可以被这个类本身、它的子类(包括同一个包中以及不同包中的子类)和同一个包中的所有其他的类访问。
4) public
  类中限定为public的成员,可以被所有的类访问。
【表3-1】 java中类的限定词的作用范围比较
同一个类
同一个包
不同包的子类
不同包非子类
private
*
default
*
*
protected
*
*
*
public
*
*
*
*2. 继承性
  通过继承实现代码复用。Java中所有的类都是通过直接或间接地继承java.lang.Object类得到的。继承而得到的类称为子类,被继承的类称为父类。子类不能继承父类中访问权限为private的成员变量和方法。子类可以重写父类的方法,及命名与父类同名的成员变量。但Java不支持多重继承,即一个类从多个超类派生的能力。
◇ 成员变量的隐藏和方法的重写
  子类通过隐藏父类的成员变量和重写父类的方法,可以把父类的状态和行为改变为自身的状态和行为。
例如:
  class SuperClass{
    int x; …
    void setX( ){ x=0; } …
  }
  class SubClass extends SuperClass{
    int x;   //隐藏了父类的变量x
    …
    void setX( ) { //重写了父类的方法 setX()
    x=5; } ….
  }
  注意:子类中重写的方法和父类中被重写的方法要具有相同的名字,相同的参数表和相同的返回类型,只是函数体不同。
  ◇ super
  java中通过super来实现对父类成员的访问,super用来引用当前对象的父类。Super 的使用有三种情况:
  1)访问父类被隐藏的成员变量,如:
    super.variable;
  2)调用父类中被重写的方法,如:
    super.Method();
  3)调用父类的构造函数,如:
    super();【例3-5】
  import java.io.*;
  class SuperClass{
    int x;
    SuperClass( ) {
     x=3;
     System.out.println(“in SuperClass : x=“ +x);
    }
     void doSomething( ) {
     System.out.println(“in SuperClass.doSomething()“);
    }
  }
  class SubClass extends SuperClass {
    int x;
    SubClass( ) {
     super( );    //调用父类的构造方法
     x=5;      //super( ) 要放在方法中的第一句
     System.out.println(“in SubClass :x=“+x);
    }
     void doSomething( ) {
     super.doSomething( ); //调用父类的方法
     System.out.println(“in SubClass.doSomething()“);
     System.out.println(“super.x=“+super.x+“ sub.x=“+x);
    }
  }
  public class Inheritance {
     public static void main(String args) {
     SubClass subC=new SubClass();
     subC.doSomething();
    }
  }3. 多态性
  在java语言中,多态性体现在两个方面:由方法重载实现的静态多态性(编译时多态)和方法重写实现的动态多态性(运行时多态)。
  1) 编译时多态
  在编译阶段,具体调用哪个被重载的方法,编译器会根据参数的不同来静态确定调用相应的方法。
  2) 运行时多态
  由于子类继承了父类所有的属性(私有的除外),所以子类对象可以作为父类对象使用。程序中凡是使用父类对象的地方,都可以用子类对象来代替。一个对象可以通过引用子类的实例来调用子类的方法。
  ◇ 重写方法的调用原则:java运行时系统根据调用该方法的实例,来决定调用哪个方法。对子类的一个实例,如果子类重写了父类的方法,则运行时系统调用子类的方法;如果子类继承了父类的方法(未重写),则运行时系统调用父类的方法。
在例3-6中,父类对象a引用的是子类的实例,所以,java运行时调用子类B的callme方法。【例3-6】
  import java.io.*;
  class A{
     void callme( ) {
      System.out.println(“Inside A’s callme()method“);
     }
  }
  class B extends A{
     void callme( ) {
      System.out.println(“Inside B’s callme() Method“);
     }
  }
  public class Dispatch{
     public static void main(String args) {
      A a=new B();
      a.callme( );
     }
  }
◇ 方法重写时应遵循的原则:
  1)改写后的方法不能比被重写的方法有更严格的访问权限(可以相同)。
  2)改写后的方法不能比重写的方法产生更多的例外。
4. 其它
  ◇ final 关键字
  final 关键字可以修饰类、类的成员变量和成员方法,但final 的作用不同。
  1) final 修饰成员变量:
  final修饰变量,则成为常量,例如
  final type variableName;
  修饰成员变量时,定义时同时给出初始值,且以后不能被修改,而修饰局部变量时不做要求。
  2) final 修饰成员方法:
  final修饰方法,则该方法不能被子类重写
  final returnType methodName(paramList){
  …
  }  3) final 类:
  final修饰类,则类不能被继承
  final class finalClassName{
  …
  }
  ◇ 实例成员和类成员
  用static 关键字可以声明类变量和类方法,其格式如下:
  static type classVar;
  static returnType classMethod({paramlist}) {
  …
  }
 如果在声明时不用static 关键字修饰,则声明为实例变量和实例方法。
  1) 实例变量和类变量
  每个对象的实例变量都分配内存,通过该对象来访问这些实例变量,不同的实例变量是不同的。
  类变量仅在生成第一个对象时分配内存,所有实例对象共享同一个类变量,每个实例对象对类变量的改变都会影响到其它的实例对象。类变量可通过类名直接访问,无需先生成一个实例对象,也可以通过实例对象访问类变量。
  2) 实例方法和类方法
  实例方法可以对当前对象的实例变量进行操作,也可以对类变量进行操作,实例方法由实例对象调用。
  但类方法不能访问实例变量,只能访问类变量。类方法可以由类名直接调用,也可由实例对象进行调用。类方法中不能使用this或super关键字。
  例3-7 是关于实例成员和类成员的例子。
【例3-7】
  class Member {
    static int classVar;
    int instanceVar;
    static void setClassVar(int i) {
     classVar=i;
     // instanceVar=i; // 类方法不能访问实例变量
    }
    static int getClassVar()
     { return classVar; }
    void setInstanceVar(int i)
     { classVar=i; //实例方法不但可以访问类变量,也可以实例变量
     instanceVar=i; }
     int getInstanceVar( )
     { return instanceVar; }
    }
    public class MemberTest{
     public static void main(String args) {
         Member m1=new member();
         Member m2=new member();
         m1.setClassVar(1);
         m2.setClassVar(2);
         System.out.println(“m1.classVar=“+m1.getClassVar()+“
                   m2.ClassVar=“+m2.getClassVar());
         m1.setInstanceVar(11);
         m2.setInstanceVar(22);
         System.out.println(“m1.InstanceVar=“+m1.getInstanceVar
              ()+“ m2.InstanceVar=“+m2.getInstanceVar());
     }
    }
◇ 类java.lang.Object
  类java.lang.Object处于java开发环境的类层次的根部,其它所有的类都是直接或间接地继承了此类。该类定义了一些最基本的状态和行为。下面,我们介绍一些常用的方法。
  equals() :比较两个对象(引用)是否相同。
  getClass():返回对象运行时所对应的类的表示,从而可得到相应的信息。
  toString():用来返回对象的字符串表示。
  finalize():用于在垃圾收集前清除对象。
  notify(),notifyAll(),wait():用于多线程处理中的同步。