JAVA还是初学,查了很多资料,还是不太了解。有说是父类对象的引用,子类实例化时会一起生成一个父类的对象。但是要是父类是抽象类呢,不是不能实例化的吗?可是super.xx()怎么也可以调用抽象父类的普通方法,不是只有实例化的对象才可以调用普通方法的吗?super到底是指什么,然后子类实例化的过程到底怎么样的,希望高手可以帮帮我。
abstract class  Base{

public void say(){
System.out.println("父类普通方法");
}
}class Sub extends Base{
public void say(){

System.out.println("子类重写的方法");
super.say();
}
}public class HelloWorld { public static void main(String[] args) {
Base sub = new Sub();
sub.say();
}}
子类重写的方法
父类普通方法

解决方案 »

  1.   

    super可以算是java的一个内置对象,代表父类。
    supder.xx()可以直接调用父类的共有方法。
      

  2.   

    super是超类,父类,是原先那个类。函数是呈现多态的。多看就会明白。原先不懂什么是面向对象。后来才明白,是面向一个一个类进行抽象的,编程的。是相对于原先开发人员说的。建议看 c++沉思录  ,能更好地理解面向对象的核心思想。java好像也有,比如 gof的设计模式 之类
      

  3.   

    你的程序中好像有点不对,super.say()应该放在System.out.println("子类重写的方法");的前面。super调用必须放在第一行的
      

  4.   

    super()代表父类的构造方法,
    super.method()代表父类中的方法
      

  5.   

    supper 和 this 是经常搞晕
      

  6.   

    super.method();我的理解就是把父类中的method()中的代码拉(编译的时候)到子类的method()中来了.也不知道对不对,期待高人解答.
      

  7.   

    对,super是超类,它可以直接调用父类的方法!
      

  8.   

    super是超类,它可以直接调用父类的方法!
      

  9.   

    super就是相当于父类。。super.xx().相当于调用父类的方法啦
      

  10.   

    举一个例子吧:
    import java.util.*;
     class Person {                           //父类,里面有Name和Number
         String Name;
         int Number;
        public void Input()                  //INPUT 方法      
        {
           System.out.println("请输入姓名:");
           Scanner sc=new Scanner(System.in);
           Name=sc.nextLine();
           System.out.println("请输入学号:");
           Number=sc.nextInt();
        }
        public void show()               //显示方法
        {
          System.out.println("姓名:"+Name+"学号:"+Number);
        }
        class Student extends Person{   //继承PERSON父类  
            int  cid;
            double score;
           public void input()
           {
           super.Input();       System.out.println("请输入班级号:");
           Scanner sc=new Scanner(System.in);
           cid=sc.nextInt();
           System.out.println("请输入成绩:");
           score=sc.nextDouble();
           }
            @Override
           public void show()
           {
           super.show();       System.out.println("班级号:"+cid+"成绩:"+score);//最后输出的有姓名,学号,班级,成绩
           
           }
         *******************
    //super();就是继承父类的方法。  
      

  11.   


    我知道super调用父类的方法,问题是它为什么可以调用,现在的矛盾是实例方法只能是对象才能调用,而抽象类不能实例化为对象
      

  12.   


    我知道super调用父类的方法,问题是它为什么可以调用,现在的矛盾是实例方法只能是对象才能调用,而抽象类不能实例化为对象
      

  13.   

    你这个程序有问题吧?抽象类必须有抽象方法啊,而且子类必须实现父类的抽象方法。你确定你这个程序能运行?Super代表的是父类,个人理解!
      

  14.   

    class Sub extends Base{ 
    public void say(){System.out.println("子类重写的方法");
    super.say();

    }在类定义里,没有实例化一样可以调用吧,举个例子,如果在Sub类里定义一个speak()方法,一样可以再子类say()里面调用吧,这是在类定义里,没有创建类对象,肯定都没有进行实例化,用super只是说明是超类的say()方法,与正在定义的say()方法区别开。以上是我的理解,不知道对不对
      

  15.   

    4L说的很正确。
    super()调用父类的构造方法
    super.method()调用父类的方法
      

  16.   

    在继承关系中,子类在创建对象的时候,super()调用父类的构造方法,并不是代表就将父类进行实例化创建对象,而是对父类进行初始化……
      

  17.   

    是父类的一个对象,文字性的东西说不明白,lz写几个demo就能理解了吧
      

  18.   

    在子类中用super.方法名或super.变量名来调用父类中在子类中被重写的方法或被隐藏的变量
      

  19.   

    当是调用父类的构造方法时,super()表示调用父类的构造方法,须放在子类构造方法的第一行,而调用父类中的其他方法时用super.XX()就不是必须放在第一行了!
      

  20.   

    super是超类,我认为就代表你继承的父类…如果你要使用父类的构造方法,直接super(),super就相当于了父类名,同时这句话要放在子类构造方法里的第一句;super.xx(),同理,等于调用父类名.方法名~~我自己是这么理解的…
      

  21.   

     我也是初学,常常被搞昏super和this