📄 right3_2_3.htm
字号:
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("in SuperClass : x=" +x);<br> }<br> void doSomething( ) {<br> System.out.println("in SuperClass.doSomething()");<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("in SubClass :x="+x);<br> }<br> void doSomething( ) {<br> super.doSomething( ); <font color="339900">//调用父类的方法</font><br> System.out.println("in SubClass.doSomething()");<br> System.out.println("super.x="+super.x+" sub.x="+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("Inside A's callme()method"); <br> } <br> }<br> class B extends A{<br> void callme( ) {<br> System.out.println("Inside B's callme() Method"); <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("m1.classVar="+m1.getClassVar()+" <br> m2.ClassVar="+m2.getClassVar());<br> m1.setInstanceVar(11); <br> m2.setInstanceVar(22);<br> System.out.println("m1.InstanceVar="+m1.getInstanceVar<br> ()+" m2.InstanceVar="+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 + -