unicorn的java课堂笔记(六)

作者在 2006-10-26 17:45:00 发布以下内容

第六节课

多态与抽象类

多态是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;}
}

子类重写了父类中的方法后也有办法访问被隐藏的父类的方法的,这就要引入super关键字了

1).使用关键字super调用父类的构造方法
子类不继承父类的构造方法,因此,子类如果想使用父类的构造方法,必须在子类的构造方法中使用,并且必须使用关键字super来表示

,而且super必须是子类构造方法中的头一条语句.例如:

转帖&&连载 | 阅读 1166 次
文章评论,共0条
游客请输入验证码