上转型:重写父类方法才调用子类方法,其他仍用父类的,包括被子类隐藏的父类成员变量,而且不能调用子类新增的成员变量和成员方法。

下转型:只能是转上去的才能转下去。下转型类似于该子类直接继承父类。

 

package Pack1;

public class updown {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        A obja;
        B objb;
        obja=new B();//obja为子类B对象的上转型对象
        //上转型用的仍然是父类的成员变量
        System.out.println("上转型对象 obja:\n"+"a1 = "+obja.a1+"\t"+"a2 = "+obja.a2+'\t');
        //上转型用的仍然是父类的方法
        obja.arithmeticOperation(10, 10);
        //上转型,若父类中的方法被子类重写,则用子类
        obja.fatherMethod();
        
        //上转型不能访问子类中新增的成员变量和方法
        //System.out.println(obja.c1);
        
        objb=(B)obja;
        //下转型后,父类的成员变量被子类隐藏,用子类的成员变量
        System.out.print("\n 强制转换对象 objb:\n"+"a1 = "+objb.a1+"\t"+"a2 = "+ objb.a2+"\t");
        objb.arithmeticOperation(10, 10);
        objb.fatherMethod();
        System.out.println("c1 = "+objb.c1); 
    }

}

class A{
    int a1=10;
    int a2=100;
    public void arithmeticOperation(int x,int y){
        System.out.println("x + y = "+ ( x + y));
    }
    public void fatherMethod(){
        System.out.println("调用父类A的方法:fatherMethod()");
    }
}

class B extends A{
    int a2=1000;
    int c1=10000;
    public void fatherMethod(){
        System.out.println("调用子类B的方法:fatherMethod()");
    }
    
}

 

 

 
 
 
 
 
 
 

上转型:重写父类方法才调用子类方法,其他仍用父类的,包括被子类隐藏的父类成员变量,而且不能调用子类新增的成员变量和成员方法。

下转型:只能是转上去的才能转下去。下转型类似于该子类直接继承父类。

 

package Pack1;

public class updown {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        A obja;
        B objb;
        obja=new B();//obja为子类B对象的上转型对象
        //上转型用的仍然是父类的成员变量
        System.out.println("上转型对象 obja:\n"+"a1 = "+obja.a1+"\t"+"a2 = "+obja.a2+'\t');
        //上转型用的仍然是父类的方法
        obja.arithmeticOperation(10, 10);
        //上转型,若父类中的方法被子类重写,则用子类
        obja.fatherMethod();
        
        //上转型不能访问子类中新增的成员变量和方法
        //System.out.println(obja.c1);
        
        objb=(B)obja;
        //下转型后,父类的成员变量被子类隐藏,用子类的成员变量
        System.out.print("\n 强制转换对象 objb:\n"+"a1 = "+objb.a1+"\t"+"a2 = "+ objb.a2+"\t");
        objb.arithmeticOperation(10, 10);
        objb.fatherMethod();
        System.out.println("c1 = "+objb.c1); 
    }

}

class A{
    int a1=10;
    int a2=100;
    public void arithmeticOperation(int x,int y){
        System.out.println("x + y = "+ ( x + y));
    }
    public void fatherMethod(){
        System.out.println("调用父类A的方法:fatherMethod()");
    }
}

class B extends A{
    int a2=1000;
    int c1=10000;
    public void fatherMethod(){
        System.out.println("调用子类B的方法:fatherMethod()");
    }
    
}