⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 right3_2_3.htm

📁 清华大学JAVA教程
💻 HTM
📖 第 1 页 / 共 2 页
字号:
                  super.variable; <br>              <br>                2)调用父类中被重写的方法,如:<br>                  super.Method([paramlist]);<br>              <br>                3)调用父类的构造函数,如:<br>                  super([paramlist]);<br>              <br>              <img src="../../../images/html/liti.gif" width="38" height="38" align="absbottom" title="例题">【例3-5】<a name="05"></a><br>                import java.io.*;<br>                class SuperClass{<br>                  int x;<br>                  SuperClass( ) {<br>                   x=3;<br>                   System.out.println(&quot;in SuperClass : x=&quot; +x);<br>                  }<br>                   void doSomething( ) {<br>                   System.out.println(&quot;in SuperClass.doSomething()&quot;);<br>                  }<br>                }<br>                class SubClass extends SuperClass {<br>                  int x;<br>                  SubClass( ) {<br>                   super( );    <font color="339900">//调用父类的构造方法</font><br>                   x=5;      <font color="339900">//super( ) 要放在方法中的第一句</font><br>                   System.out.println(&quot;in SubClass :x=&quot;+x);<br>                  }<br>                   void doSomething( ) {<br>                   super.doSomething( ); <font color="339900">//调用父类的方法</font><br>                   System.out.println(&quot;in SubClass.doSomething()&quot;);<br>                   System.out.println(&quot;super.x=&quot;+super.x+&quot; sub.x=&quot;+x);<br>                  }<br>                }<br>                public class Inheritance {<br>                   public static void main(String args[]) {<br>                   SubClass subC=new SubClass();<br>                   subC.doSomething();<br>                  }<br>                }<br>              <br>                  <a href="#05" onClick="MM_openBrWindow('tanchu5.htm','','width=200,height=150')"><font color="#FF0000">查看运行结果</font></a><br>              <br>               </span><span class="zhongdian">3. 多态性<a name="03"></a></span><span class="pt9-black"><br>              <br>                在java语言中,多态性体现在两个方面:由方法重载实现的静态多态性(编译时多态)和方法重写实现的动态多态性(运行时多态)。<br>              <br>                1) 编译时多态<br>                在编译阶段,具体调用哪个被重载的方法,编译器会根据参数的不同来静态确定调用相应的方法。<br>              <br>                2) 运行时多态<br>                由于子类继承了父类所有的属性(私有的除外),所以子类对象可以作为父类对象使用。程序中凡是使用父类对象的地方,都可以用子类对象来代替。一个对象可以通过引用子类的实例来调用子类的方法。<br>              <br>                <b>◇</b> <b>重写方法的调用原则</b>:java运行时系统根据调用该方法的实例,来决定调用哪个方法。对子类的一个实例,如果子类重写了父类的方法,则运行时系统调用子类的方法;如果子类继承了父类的方法(未重写),则运行时系统调用父类的方法。<br>              <br>                在例3-6中,父类对象a引用的是子类的实例,所以,java运行时调用子类B的callme方法。<br>              <br>              <img src="../../../images/html/liti.gif" width="38" height="38" align="absbottom" title="例题">【例3-6】<a name="06"></a><br>                import java.io.*;<br>                class A{<br>                   void callme( ) {<br>                    System.out.println(&quot;Inside A's callme()method&quot;);               <br>                   } <br>                }<br>                class B extends A{<br>                   void callme( ) {<br>                    System.out.println(&quot;Inside B's callme() Method&quot;);               <br>                   }<br>                }<br>                public class Dispatch{<br>                   public static void main(String args[]) {<br>                    A a=new B();<br>                    a.callme( );<br>                   }<br>                }<br>              <br>                  <a href="#06" onClick="MM_openBrWindow('tanchu6.htm','','width=200,height=100')"><font color="#FF0000">查看运行结果</font></a><br>              <br>                <b>◇</b> <b>方法重写时应遵循的原则</b>:<br>                1)改写后的方法不能比被重写的方法有更严格的访问权限(可以相同)。<br>                2)改写后的方法不能比重写的方法产生更多的例外。<br>              <br>               </span><span class="zhongdian">4. 其它<a name="04"></a></span><span class="pt9-black"><br>              <br>                <b>◇ final 关键字</b><br>                final 关键字可以修饰类、类的成员变量和成员方法,但final 的作用不同。<br>                <br>                1) final 修饰成员变量:<br>                final修饰变量,则成为常量,例如<br>                final type variableName;<br>                修饰成员变量时,定义时同时给出初始值,而修饰局部变量时不做要求。<br>              <br>                2) final 修饰成员方法:<br>                final修饰方法,则该方法不能被子类重写<br>                final returnType methodName(paramList){<br>                …<br>                }</span></p>            <p><span class="pt9-black">  3) final 类: <br>                final修饰类,则类不能被继承<br>                final class finalClassName{<br>                …<br>                }</span><br>              <span class="pt9-black"><br>                <b>◇ 实例成员和类成员</b><br>                用static 关键字可以声明类变量和类方法,其格式如下:<br>                static type classVar;<br>                static returnType classMethod({paramlist}) {<br>                …<br>                }<br>               <br>                如果在声明时不用static 关键字修饰,则声明为实例变量和实例方法。<br>                1) 实例变量和类变量<br>                每个对象的实例变量都分配内存,通过该对象来访问这些实例变量,不同的实例变量是不同的。<br>                类变量仅在生成第一个对象时分配内存,所有实例对象共享同一个类变量,每个实例对象对类变量的改变都会影响到其它的实例对象。类变量可通过类名直接访问,无需先生成一个实例对象,也可以通过实例对象访问类变量。<br>              <br>                2) 实例方法和类方法<br>                实例方法可以对当前对象的实例变量进行操作,也可以对类变量进行操作,实例方法由实例对象调用。<br>                但类方法不能访问实例变量,只能访问类变量。类方法可以由类名直接调用,也可由实例对象进行调用。类方法中不能使用this或super关键字。<br>              <br>                例3-7 是关于实例成员和类成员的例子。<br>              <br>              <img src="../../../images/html/liti.gif" width="38" height="38" align="absbottom" title="例题">【例3-7】<a name="07"></a><br>                class Member {<br>                  static int classVar;<br>                  int instanceVar;<br>                  static void setClassVar(int i) {<br>                   classVar=i;<br>                   // instanceVar=i; <font color="339900">// 类方法不能访问实例变量</font><br>                  }<br>                  static int getClassVar()<br>                   { return classVar; }<br>                  void setInstanceVar(int i)<br>                   { classVar=i; <font color="339900">//实例方法不但可以访问类变量,也可以实例变量</font><br>                   instanceVar=i; }<br>                   int getInstanceVar( ) <br>                   { return instanceVar; }<br>                  }<br>                  public class MemberTest{<br>                   public static void main(String args[]) {<br>                       Member m1=new member();<br>                       Member m2=new member();<br>                       m1.setClassVar(1);<br>                       m2.setClassVar(2); <br>                       System.out.println(&quot;m1.classVar=&quot;+m1.getClassVar()+&quot;               <br>                                 m2.ClassVar=&quot;+m2.getClassVar());<br>                       m1.setInstanceVar(11); <br>                       m2.setInstanceVar(22);<br>                       System.out.println(&quot;m1.InstanceVar=&quot;+m1.getInstanceVar<br>                            ()+&quot; m2.InstanceVar=&quot;+m2.getInstanceVar());<br>                   }<br>                  }<br>              <br>                  <a href="#07" onClick="MM_openBrWindow('tanchu7.htm','','width=200,height=150')"><font color="#FF0000">查看运行结果</font></a><br>              <br>                <b>◇</b> <b>类java.lang.Object</b><br>                类java.lang.Object处于java开发环境的类层次的根部,其它所有的类都是直接或间接地继承了此类。该类定义了一些最基本的状态和行为。下面,我们介绍一些常用的方法。<br>              <br>                equals() :比较两个对象(引用)是否相同。<br>                getClass():返回对象运行时所对应的类的表示,从而可得到相应的信息。<br>                toString():用来返回对象的字符串表示。<br>                finalize():用于在垃圾收集前清除对象。<br>                notify(),notifyAll(),wait():用于多线程处理中的同步。</span></p>            </td>        </tr>      </table>    </td>  </tr></table></body></html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -