📄 java04_03.htm
字号:
<html>
<head>
<meta http-equiv="Content-Language" content="zh-cn">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>Java程序设计</title>
</head>
<body background="Bg.gif">
<p align="center"><font size="5"><b>§4.3属性的隐藏和方法的覆盖</b></font></p>
<p align="left">
由于子类会自动继承父类的成员,如果该成员不符合子类的要求该怎么办呢?一种简单的方法是不使用它,另外取名,定义新的变量和方法,但有时取名是一个麻烦事。另一种方法是取同样的名字,将父类的变量和方法覆盖掉。</p>
<p align="left">
当子类的成员变量和父类的同名时,称为父类的成员变量(属性)被隐藏;如果是成员方法同名,称为父类的成员方法被覆盖。</p>
<p align="left">一、属性的隐藏</p>
<p align="left">class myfather{<br>
int value=5;<br>
void fathershow()<br>
{ System.out.println("这是父类的缺省修饰变量value="+value);<br>
}<br>
}<br>
<br>
public class testvar extends myfather{<br>
int value=10;<br>
void sunshow() <br>
{<br>
System.out.println("这是子类中的变量value="+value);<br>
//在子类的方法中访问的value都是本类中的value<br>
} <br>
public static void main(String argv[])<br>
{ testvar va=new testvar();<br>
va.sunshow(); <br>
va.fathershow();<br>
System.out.println("这是子类中的变量value="+va.value);<br>
}<br>
}</p>
<p align="left">注意:在testvar这个子类中,只是暂时将父类的value变量隐藏起来,它实际上还是存在的,后面我们将通过其它的方法来访问这一变量。</p>
<p align="left">二、方法的覆盖</p>
<p align="left">
如果子类中定义了和父类中相同的成员方法,就可以实现对父类方法的覆盖。这里的“相同”是指方法的名字、返回值、参数个数、类型、顺序要完全一样。否则就是“重载”而非“覆盖”。看下面的例子:</p>
<p align="left">class myfather{<br>
void commshow()<br>
{ System.out.println("这是父类的显示函数");<br>
}<br>
}<br>
<br>
class mysun extends myfather{<br>
void commshow() //此方法覆盖了和父类中同样的方法<br>
{System.out.println("这是子类的显示函数"); <br>
} <br>
}<br>
<br>
public class testvar {<br>
public static void main(String argv[])<br>
{ mysun va=new mysun();<br>
va.commshow();<br>
}<br>
}</p>
<p align="left">上面的例子中,commshow除了方法体内的语句不同,声明部分完全相同。如果将mysun中的方法声明成这个样子:</p>
<p align="center">void commshow(int i)</p>
<p align="left">那就不是覆盖了,显示的结果会不同。</p>
<p align="left">覆盖时还有一个原则,就是关于访问权限的修饰符。Java遵循“公开的不再是秘密”的原则,规定子类覆盖父类的方法的访问控制权限不允许比原方法更严格,只能更宽松。例如,父类声明成:<br>
protected void commshow()<br>
则子类可以是:<br>
public void commshow()<br>
protected void commshow()<br>
但不能是: <br>
private void commshow() <br>
void commshow()</p>
<p align="left"><a href="index.htm">回目录</a> <a href="java04_02.htm">上一课</a>
<a href="java04_04.htm">下一课</a></p>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -