A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© clp 中级黑马   /  2013-6-2 16:31  /  1680 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

存不存在“抽象静态方法”和“抽象构造方法”这两个概念的?如果有他们干什么用的?没有的话,可否解释一下原因

5 个回复

倒序浏览
本帖最后由 王鑫 于 2013-6-2 17:26 编辑

应该是不存在的。抽象方法没有方法体,需要子类复写才有意义,而如果抽象方法可以静态,那么它就随着类的产生而产生,就不能再被复写,那么抽象方法这个概念也就没有意义了。
回复 使用道具 举报
不存在“抽象静态方法”概念
抽象类是不能实例化的,即不能被分配内存,而static修饰的方法在类实例化之前就已经别分配了内存,这样一来矛盾就出现了:抽象类不能被分配内存,而static方法必须被分配内存。所以不能有静态的抽象方法。
而且,静态修饰的是类成员的共有属性,必须有内容,而抽象方法是没有内容的,这是矛盾的。
回复 使用道具 举报
抽象构造方法也不行。但是抽象类里面可以有构造方法。
抽象类必须是父类,是可以被继承的。当子类继承父类时,需要对父类的所有抽象方法进行重写,如果父类构造方法被定义成了抽象的,那子类就无法完成重写。
回复 使用道具 举报
本帖最后由 hm_李大强 于 2013-6-2 20:54 编辑

没有这两个,首先说抽象静态方法:也就是说abstract static 定义的方法,我们知道static定义的方法是可以被类直接调用的方法,但abstract是没有方法体的怎么被调用,所以在编译期就存在问题。然后是构造方法,我们知道抽象方法被子类继承是必须要被覆盖的,父类的构造方法是不能重写覆盖的
回复 使用道具 举报
第一个问题:从逻辑上讲,假如一个抽象方法能定义成静态,那么通过类调用这个静态方法,这个方法没有方法体,那么调用它就没有意义,编译是通不过的。
第二个问题:抽象类不能实例化,但是在实例化它的子类对象时,还是会执行父类的无参构造方法,这个构造方法是有实体的,定义抽象非法!
abstract class A{
        public A(){
                System.out.println("抽象A建立");
        }
        public abstract void fun();
}
class B extends A{

        @Override
        public void fun() {
                System.out.println("B...");
               
        }
       
}
public class LuntanPicCopy {
        public static void main(String[] args)
    {
                A a=new B();
                a.fun();
    }
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马