本帖最后由 java2000_net 于 2008-08-05 11:14:16 编辑

解决方案 »

  1.   

    main是个可以看成静态方法,可以通过调用静态方法调用,不能继承
      

  2.   

    static方法能不能继承,还有待商讨。看怎么理解了
    子类可以直接调用父类的static方法。
    可以通过类名直接来调用,也可以通过对象来调用。
      

  3.   


    public class TestFather {
        public static String s(String str){
         return str;
        }
    }public class TestSun extends TestFather{  public static void main(String[] args){
    System.out.println(TestFather.s("abc"));
            System.out.println(new TestFather().s("abc"));
    System.out.println(TestSun.s("abc"));
            System.out.println(new TestSun().s("abc"));
      
      }}
      

  4.   


    //第一个类
    public class Test
    {
    public static void main(String args[])
    {
    System.out.println("a main method is running now");
    }
    }
    //第二个类
    public class Test2 extends Test
    {

    }
    /*
      编译并运行第二个类,打印出
    a main method is running now
    由此证明,main方法一样被继承了
    没实验的人别乱吹
    */
      

  5.   

    别告诉我你两个类写在一个java文件里运行的?
    真是那样的话你运行的也是Test类,和Test2一点儿关系都没有
      

  6.   


    你这样说不通。
    static定义的域或方法是属于类的,不属于对象。所谓的可以通过对象来调用,让人匪夷所思!
    至于阻止被继承,应该是 final!
      

  7.   

    还有static方法是可以被重载的,典型的例子就是你使用的构造方法!
    至于构造方法也属于特殊情况。static方法可以被继承吗?在SuperClass中定义一个staticMethod
    然后使用SunClass.staticMethod。你试试看不就知道了!呵呵,答案是可以的。
      

  8.   


    还有static方法是可以被重载的,典型的例子就是你使用的构造方法!试问:构造方法有static的吗?
      

  9.   


    方法 当然可以继承,  不管是不是静态的!~java的理念:  子承父类,   所有的属性和方法全部继承main()同样也为方法, 为何不能继承这么简单的一个逻辑功能呢?属性和构造方法 不能被重写,  因为它们都是数据结构--  一个是标志位的  一个是描述位的;
      

  10.   

    是的,隐式声明为static的。这就要说到多态性的静态绑定了。
      

  11.   

    你这样想,要是构造方法不为static,那在没有类没有实例之前怎么调用一个非static的方法来提供实例化类的服务呢?
      

  12.   

    你在哪里看到的构造方法隐式为static的?
      

  13.   

    问下 qfs_v 
    如果构造方法隐式为static,那还真奇怪了,怎么产生不同的对象?
      

  14.   


    经过试验,你的代码里TestSun.s和new TestSun().s两个方法都不行
      

  15.   

    从理论上讲 貌似应该是能的吧~
    不过main()一般都是测试用的~ 继承了也没什么意义额吧..
      

  16.   

    Thinking in java中说过,构造方法其实是static的.
    The Java Programming Language上说过,所有static的方法和属性都是不能覆盖的,只是hidden.
      

  17.   

    这位好像分不清什么是overriding和overloading
    构造方法无法覆盖.
    子类只能通过super来直接调用父类的构造方法.
      

  18.   

    1.构造方法其实是static,//这个我确实没有看到过,看来要回去好好看看thin in java了
    2.所有static的方法和属性都是不能覆盖的//能不能继承?或则说是不是应该叫继承。我觉得还有待商量
      

  19.   

    我还可以明确的告诉你在子类中重写父类的static,final,private方法,实质上是创建了一个新的方法。但你不要问我在哪里看到的,因为事实就是这样。
      

  20.   

    的确,按照面向对象方法学的理解,子类继承父类的一切.
    但感觉static的东西类似面向过程里的函数,不像对象本质的东西.
      

  21.   

    反射等技术,鉴于你对好好想下 “要是构造方法不为static,那在没有类没有实例之前怎么调用一个非static的方法来提供实例化类的服务呢?” 这句话。
      

  22.   

    final表示阻止继承,也就要是说你重写了父类的方法其实就是在重新定义一个新的方法。
      

  23.   

    重写了父类的方法怎么能叫继承?
    继承就是我不定义,就能拿来用。影响继承的只是private,protectd,public等修饰符。
    main()是public的 子类就可以继承
      

  24.   

    多态就是通过重写(override)实现的.
      

  25.   


    你要是能够把父类的一个final方法继承了,我就服你了。
      

  26.   

    我认同这样的说法:
    overloading 重载(跟面向对象无关,方法的一种特性,签名不同)
    overriding覆盖或者重写(多态的关键,父类和子类的相同签名方法之间的关系)
      

  27.   

    你要是能够把父类的一个final方法继承了,我就服你了。 
    子类继承了父类的final方法,只是不能overriding罢了
      

  28.   

    现在是用事实说话的时候了
    public class SuperClass { public SuperClass() {

    } public final void test(){
    System.out.println("SuperClass test");
    }
    }public class SunClass extends SuperClass { public SunClass() { } public void test(){

    }
    }编译器会提示你错误!
    axiuluo 你可以更加还怀疑这样的说法: final表示阻止继承,也就要是说你重写了父类的方法其实就是在重新定义一个新的方法。 因为编译器会提示你错误为你再次提供了怀疑的理由,但这是编译器行为,而不是java语言的本质。
      

  29.   

    继承: 父类有,子类没有
    覆盖(overrite, hide): 父类有,子类重新定义,但是参数不同 或者返回值不同
    重载(overload):父类有,子类重新定义,方法签名一致---> 多态的基础这种情况应该算是继承,因为子类没有定义main
      

  30.   

    那你说 
    影响继承的只是private,protectd,public等修饰符。 
    main()是public的 子类就可以继承
    不是自相矛盾?
      

  31.   

    这个例子终于把你的说法否定了:
    引用 38 楼 qfs_v 的回复:
    final表示阻止继承,也就要是说你重写了父类的方法其实就是在重新定义一个新的方法。
      

  32.   

    提示:这是编译器行为,而不是java语言的本质。
      

  33.   

    java编译器违反了java的本质?
    sun问题大了
      

  34.   

    Marking a method final means that no extended class can override the method to change its behavior. In other words, this is the final version of that method. 
      

  35.   

    final阻止了该方法继承,子类重写该方法其实就是在重新定义一个新的方法。而对于这样的新方法,是不能接受的,因为这样会产生本身要解决的问题:阻止继承。
    这就是 矛盾 。就是鸡和蛋的问题,为了解决这样的问题,我们只能站在鸡或蛋的一边来解决。 这里sun选择了鸡。
      

  36.   


    子类可以直接调用父类的static方法。 
    可以通过类名直接来调用,也可以通过对象来调用。
      

  37.   

    a main method is running now
    由此证明,main方法一样被继承了
    没实验的人别乱吹
      

  38.   

    这是sun的Java Tutorial中的说法:A subclass inherits all the member variables and methods from its superclass. However, the subclass might not have access to an inherited member variable or method. For example, a subclass cannot access a private member inherited from its superclass. One might think, then, that the item was not inherited at all. But the item is inherited. This becomes important when using an inner class, which does have access to its enclosing class's private members. Note that constructors are not members and so are not inherited by subclasses. 
      

  39.   


    class A{
    public static void main(String[] args){
    System.out.println("可以被继承");
    }
    }
    public class B extends A{
    public static void main(String[] args){
    A.main(new String[]{"fds","fdsfdsa"});
    }
    }
    不能变继承吧,static 方法好像不能被继承,但是可以被调用
      

  40.   

    A subclass inherits all the member variables and methods from its superclass.
    不知道final阻止继承的说法从何而来.
    它只是阻止子类覆盖整个方法,java编程语言中这样说:Marking a method final means that no extended class can override the method to change its behavior. In other words, this is the final version of that method. 
    也就相当于说这个方法是最终版.
    子类不能重写,但是可以使用.
      

  41.   

    继承:
    使用和重写
    将共有的部分放在父类中来“使用”,将不同部分放到子类中去“重写”。
    对于继承,我们要的不仅仅是使用公共部分,重要的在在于使用重写来达到多态的目的。这也是你所赞同的。“多态就是通过重写(override)实现的.”不知道final阻止继承的说法从何而来. 那你看看下面的类,这就是典型的阻止继承:public final class SuperClass { public SuperClass() {

    } public final void test(){
    System.out.println("SuperClass test");
    }
    }
      

  42.   

    真晕,这跟你前面一直喊的final方法一样吗
      

  43.   


    final方法和final类都是一个目的。
    重点还是在我上面的话!重要的不是可不可以,而是为什么不可以!
      

  44.   

    这个你主要是要讲static调用类方法实例对象就多余了哦,一般不推荐,直接调用类方法!
      

  45.   

    我试过了,可以!要是不能一定是少给TestSun写了继承了!
      

  46.   

    这次学期老外试卷测试总结main method can be inheritanced,also can have a few class in the same class.
    eg.  main(String args[])、main(String s)、main(int a); all can excuse in one class.谢谢大家参与,16楼说的比较....以后大家继续研讨。
      

  47.   

    从理论和实践中我们都能看到main方法是可以继承的。不行你将代码输进去试试就知道了
      

  48.   

    用 7 楼 rypgood 的回复: 
    Java code 
    //第一个类 
    public class Test 

        public static void main(String args[]) 
        { 
            System.out.println("a main method is running now"); 
        } 

    //第二个类 
    public class Test2 extends Test 

        

    /* 
      编译并运行第二个类,打印出 
    a main method is running now 
    由此证明,main方法一样被继承了 
    没实验的人别乱吹 
    */ 
    汗,我可… 
     可是我试过了,是可以的。 
    而且子类是可以使用父类的静态方法的。
      

  49.   

    受益匪浅!!!暑假看下Java Tutorial~~