灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:3058回复:0

[系统教程]JAVA基础教程(9)

楼主#
更多 发布于:2012-09-08 08:09


多态与抽象类
多态是java中一个比较重要的概念,在认识和理解它之前先熟悉一下下面的几个概念.
1.成员变量的隐藏和方法的重写
成员变量的隐藏:子类可以隐藏继承的成员变量,对于子类可以从父类继承成员变量,只要子类中定义的成员变量和父类中的成员变量同名时,子类就隐藏了继承的成员变量.但不提倡这种做法,子类总是自己定义变量而隐藏父类的变量,这样会浪费很多空间.
方法的重写:子类可以隐藏已继承的方法,子类通过方法重写来隐藏继承的方法.具体是指,子类中定义一个方法,并且这个方法的名字,返回值类型,参数个数和类型与父类继承的方法完全相同.
注意:方法的重写与方法的重载要分清楚,回顾一下方法的重载的定义为方法名必须相同,参数的类型和个数必须不同.
用下面的程序好好体会一下方法的重写(还有重载)

复制代码
class Chengji
{  float f(float x,float y)
{   return x*y;
   }
}
class Xiangjia  extends Chengji
{  
float f(float x,float y) //方法的重写,方法的名字,返回值类型,参数个数和类型与父类完全相同
{   return x+y ;
   }
//float f(float,x,int y) {return x-y;}错误的语句,在方法名相同的情况下既不属于"重写"也不属于"重载"
//float f(int x,int y,int z){z=x-y; return z;}方法的重写,琢磨一下定义就知道了
}
public class Example
{  public static void main(String args[])
{ Xiangjia sum;
     sum=new Xiangjia();
     float c=sum.f(4,6);//调用的是子类里的f(),因为子类重写了父类的f()
     //c=sum.f(1,2,3); 这个则是调用了重载的函数;当然具体调用那个要根据实参的个数和类型来判断喽
     System.out.println(c);
   }
}


如果没有重写父类的方法,那使用父类中的方法时就正常使用,看看下面这个混合使用的例子

复制代码
class Area
{  float f(float r )
   {  return 3.14159f*r*r;
   }
   float g(float x,float y)
   {  return x+y;
   }
}
class Circle extends Area
{   float f(float r)
    { return 3.14159f*2.0f*r;//重写
    }  
}
public class Example4_17
{  public static void main(String args[])
   {  Circle yuan;
      yuan=new Circle();
      float length=yuan.f(5.0f);            
      float sum=yuan.g(232.645f,418.567f); //父类中的方法正常使用
      System.out.println(length);
      System.out.println(sum);  
   }
}


注意:重写父类的方法时,不可以降低方法的访问权限.下面的例子中,子类重写父类的方法f,该方法在父类中的访问权限实protected级别,子类重写时不允许级别低于protected级别.

复制代码
class Chengji
{
protected float f(float x,float y)
{return x*y;}
}
class Xiangjia extends Chengji
{
float f(float x,float y)//错误,friendly的权限低于protected
{return x+y;}
}
class Xiangjian extends Chengji
{
public float f(float x,float y)//正确,public的权限高于protected
{return x-y;}
}




喜欢0 评分0
游客

返回顶部