您的位置:首页 > 编程语言 > Java开发

JAVA多态与类型转化分析

2011-09-02 10:35 267 查看
 
JAVA多态与类型转化分析
 
多态与类型转化原理分析:

一、多态性:超类引用在运行时既能代表超类本身的对象,也能代表其子类的对象的能力。

类的一个成员若想表现多态必须可以被覆盖:

对于成员变量而言,不会发生覆盖现象(会隐藏),在子类出现相同变量的定义时只会隐藏父类变量,因此不会表现多态。同时变量调用在编译时就会解析,不符合动态绑定的特征;

在成员方法中,静态方法和final方法(private方法)也不会发生覆盖现象(会隐藏),因此也不会表现多态性。

因此只有除静态方法和final方法以外的方法才会表现多态性。

二、向上类型转化时:

丢失添加的方法和字段,剩余的为:

基类字段

基类静态方法或final方法  //前二者为不能被覆盖的成员,因此保留,无多态性

基类其他方法(若被子类覆盖则为子类覆盖的新方法)

package test3;

class oopsuper {

 static String str = "父类字段";

 public void publicMethod(){System.out.println("父类public方法");}

 protected  void protectedMethod(){System.out.println("父类protected方法");}//(1)

    private void privateMethod(){System.out.println("父类private方法");}

 static void staticMethod(){System.out.println("父类静态方法"); }

}

public class oopsub extends oopsuper {

  String str = "子类字段";

 public void publicMethod(){System.out.println("子类public方法");}

 protected  void protectedMethod(){System.out.println("子类protected方法");}//(2)

    private void privateMethod(){System.out.println("子类private方法");}

 static void staticMethod(){System.out.println("子类静态方法"); }

 public static void main(String[] args) {

  oopsuper upcast = new oopsub();

  

  System.out.println(upcast.str);//方法调用才具有多态性,而域没有多态性

  

  // 能被覆盖的方法的行为才有多态特性

  upcast.publicMethod();

  upcast.protectedMethod();//若注释掉(1)则有错误;若注释掉(2)则输出:子类protected方法

          // 不能被覆盖的方法[final方法(含私有方法)、静态方法]的行为不具有多态特性

  // upcast.privateMethod();访问的是父类的私有方法,不能访问,不具有多态现象

  upcast.staticMethod();

  

 }

}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java string class