注意:访问本站需要Cookie和JavaScript支持!请设置您的浏览器! • 打开购物车 • 查看留言 • 付款方式 • 联系我们 |
首页 | 电子入门 | 学单片机 | 免费资源 | 下载中心 | 商品列表 | 象棋在线 | 在线绘图 | 加盟五一 | 加入收藏 | 设为首页 |
选择分类:当前分类——电脑编程 相关联或者相类似的文章: 国产OS?中文CPU?(1213) JAVA教程 第一讲 Java语言概述(2)(796) JAVA教程 第三讲 Java语言中的面向对象特性(1)(785) vb的10个小技巧 (772) 学编程的人不能不看的好文章 (745) JAVASCRIPT简介 (736) 绝对不知道你的浏览器还有这个功能!!(722) JAVA对象入门第1章 对象入门(719) 给初学编程者的忠告 (702) JavaScript 对象与数组参考大全(650) JAVA教程 第三讲 Java语言中的面向对象特性(2)(631) JAVA教程 第三讲 Java语言中的面向对象特性(3)(587) VB开发Windows环境下的串行通信程序(560) SQL转ACCESS解决自动编号问题(531) JAVA教程 Java语言基础知识(452) JAVA教程 第二讲 Java语言基础知识(1)(364) DHTML参考手册(一)(210) [精]5分钟编写一个ASP论坛(99) Cookies常用命令简介(99) RegExp正则表达示用法(3) 首页 前页 后页 尾页 本站推荐: | JAVA教程 第三讲 Java语言中的面向对象特性(2) JAVA教程 第三讲 Java语言中的面向对象特性(2) 注意:子类中重写的方法和父类中被重写的方法要具有相同的名字,相同的参数表和相同的返回类型,只是函数体不同。 ◇ super java中通过super来实现对父类成员的访问,super用来引用当前对象的父类。Super 的使用有三种情况: 1)访问父类被隐藏的成员变量,如: super.variable; 2)调用父类中被重写的方法,如: super.Method([paramlist]); 3)调用父类的构造函数,如: super([paramlist]); 【例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(); } } 运行结果 c:\%26gt; java Inheritance in SuperClass: x=3 in SubClass: x=5 in SuperClass.doSomething() in SubClass.doSomething() super.x=3 sub.x=5 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( ); } } 运行结果 c:\%26gt; java Dispatch Inside B’s callme() method ◇ 方法重写时应遵循的原则: 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()); } } 运行结果 c:\%26gt; java MemberTest m1.classVar=2 m2.classVar=2 m1.InstanceVar=11 m2.InstanceVar=22 ◇ 类java.lang.Object 类java.lang.Object处于java开发环境的类层次的根部,其它所有的类都是直接或间接地继承了此类。该类定义了一些最基本的状态和行为。下面,我们介绍一些常用的方法。 equals() :比较两个对象(引用)是否相同。 getClass():返回对象运行时所对应的类的表示,从而可得到相应的信息。 toString():用来返回对象的字符串表示。 finalize():用于在垃圾收集前清除对象。 notify(),notifyAll(),wait():用于多线程处理中的同步。 3.2.4抽象类和接口 1. 抽象类 java语言中,用abstract 关键字来修饰一个类时,这个类叫做抽象类,用abstract 关键字来修饰一个方法时,这个方法叫做抽象方法。格式如下: abstract class abstractClass{ …} //抽象类 abstract returnType abstractMethod([paramlist]) //抽象方法 抽象类必须被继承,抽象方法必须被重写。抽象方法只需声明,无需实现;抽象类不能被实例化,抽象类不一定要包含抽象方法。若类中包含了抽象方法,则该类必须被定义为抽象类。 2. 接口 接口是抽象类的一种,只包含常量和方法的定义,而没有变量和方法的实现,且其方法都是抽象方法。它的用处体现在下面几个方面: ◇ 通过接口实现不相关类的相同行为,而无需考虑这些类之间的关系。 ◇ 通过接口指明多个类需要实现的方法。 ◇ 通过接口了解对象的交互界面,而无需了解对象所对应的类。 1)接口的定义 接口的定义包括接口声明和接口体。 接口声明的格式如下: [public] interface interfaceName[extends listOfSuperInterface] { … } extends 子句与类声明的extends子句基本相同,不同的是一个接口可有多个父接口,用逗号隔开,而一个类只能有一个父类。 接口体包括常量定义和方法定义 常量定义格式为:type NAME=value; 该常量被实现该接口的多个类共享; 具有public ,final, static的属性。 方法体定义格式为:(具有 public和abstract属性) returnType methodName([paramlist]); 2)接口的实现 在类的声明中用implements子句来表示一个类使用某个接口,在类体中可以使用接口中定义的常量,而且必须实现接口中定义的所有方法。一个类可以实现多个接口,在implements子句中用逗号分开。 3) 接口类型的使用 接口作为一种引用类型来使用。任何实现该接口的类的实例都可以存储在该接口类型的变量中,通过这些变量可以访问类所实现的接口中的方法。 3.2.5 内部类 1. 内部类的定义和使用: 内部类是在一个类的内部嵌套定义的类,它可以是其它类的成员,也可以在一个语句块的内部定义,还可以在表达式内部匿名定义。 内部类有如下特性 同。 ◇ super java中通过super来实现对父类成员的访问,super用来引用当前对象的父类。Super 的使用有三种情况: 1)访问父类被隐藏的成员变量,如: super.variable; 2)调用父类中被重写的方法,如: super.Method([paramlist]); 3)调用父类的构造函数,如: super([paramlist]); 【例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(); } } 运行结果 c:\%26gt; java Inheritance in SuperClass: x=3 in SubClass: x=5 in SuperClass.doSomething() in SubClass.doSomething() super.x=3 sub.x=5 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( ); } } 运行结果 c:\%26gt; java Dispatch Inside B’s callme() method ◇ 方法重写时应遵循的原则: 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()); } } 运行结果 c:\%26gt; java MemberTest m1.classVar=2 m2.classVar=2 m1.InstanceVar=11 m2.InstanceVar=22 1、 本站不保证以上观点正确,就算是本站原创作品,本站也不保证内容正确。 2、如果您拥有本文版权,并且不想在本站转载,请书面通知本站立即删除并且向您公开道歉! |
本站协议 |
版权信息 |
关于我们 |
本站地图 |
营业执照 |
发票说明 |
付款方式 |
联系方式
深圳市宝安区西乡五壹电子商行——粤ICP备16073394号-1;地址:深圳西乡河西四坊183号;邮编:518102 E-mail:51dz$163.com($改为@);Tel:(0755)27947428 工作时间:9:30-12:00和13:30-17:30和18:30-20:30,无人接听时可以再打手机13537585389 |