class Super 
{  
     String greeting() 
    {  
       return "hello super"; 
    } 
     

class Sub extends Super 
{  
     String greeting() 
    { 
       return "Hello sub "; 
    } 
    
}class Test 

    public static void main(String[] args) 
    { 
       Super s = new Sub(); 
      
  System.out.println(((Super)s).greeting());  //强制转型为父类  System.out.println(s.greeting());
 
   } 

运行时输出的都是 Hello sub 而没有 Hello super 、为什么强制转型失效
在不改变类super和类sub的条件下
子类对象怎样才能调用父类到的greeting()方法?

解决方案 »

  1.   

    class Super 
    {  
         public static String  greeting() 
        {  
           return "hello super"; 
        } 
         

    class Sub extends Super 
    {  
         public static String  greeting() 
        { 
           return "Hello sub "; 
        } 
        
    }public class Test 

        public static void main(String[] args) 
        { 
           Super s = new Sub(); 
          
      System.out.println(((Super)s). greeting());//强制转型为父类  System.out.println(((Sub)s).greeting());
     
       } 

    这样就可以输出所需要的结果了
      

  2.   

    new Sub()构造的是子类,具有的当然是子类的属性
      

  3.   

    注意!!!
    xinyingwan()的方法严重误导继承的多态表现,因为在他的代码里,两个方法都是静态方法,而静态方法是属于类本身的资源,跟对象和继承没有任何关系!可以直接通过类名来调用!
      

  4.   

    xinyingwan()  我说的是在不改变 类sub和类super的情况下 怎么使用父类的方法
    静态方法这个我知道
      

  5.   

    调不到,除非你直接new一个父类对象