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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

abstract class A{
        public A(){
                System.out.println("父类-->A") ;
        }
        public abstract void fun();
};
class B extends A{
        public B(){
                System.out.println("子类-->B") ;
        }
        public void fun(){
                System.out.println("覆写了父类的fun()方法") ;
        }
}
public class print {
        public static void main(String args[]){
            B b = new B() ;       
            b.fun() ;
        }
}

点评

发帖的时候吧代码放在代码块中,有利于其他人阅读...  发表于 2014-3-31 18:02

4 个回复

倒序浏览
抽象类中的构造函数 是用来初始化 属性等等的
可以让子类直接使用

评分

参与人数 1技术分 +1 收起 理由
itpower + 1

查看全部评分

回复 使用道具 举报
父类-->A
子类-->B
覆写了父类的fun()方法
从运行结果上就可以证明抽象类中是可以有构造方法的,但是是不能实例化对象的。
回复 使用道具 举报
调用子类构造方法都会调用它的直接父类的构造方法
使用new才会返回一个实例的引用,而抽象类是不能new的
调用子类构造方法时,先要调用了它的抽象父类的构造方法,然后初始化自己的成员变量
总之,构造方法是用来做初始化工作的,它并不会返回实例,所以抽象类中可以有构造方法,具体调用过程是子类构造方法调用父类构造方法,每个子类默认构造方法中都隐含着super()方法,对于子类有参数的构造方法,有super(参数)。
可以将代码改为下列形式,结果一样。
  1. public class Print{
  2.     public static void main(String args[]){
  3.         B b = new B() ;        
  4.         b.fun() ;
  5.     }
  6. }
  7. abstract class A{
  8.         public A(){
  9.                 System.out.println("父类-->A") ;
  10.         }
  11.       //  public abstract void fun();
  12.                                
  13. };
  14. class B extends A{
  15.         public B(){
  16.                         super();//调用父类默认构造方法
  17.                 System.out.println("子类-->B") ;
  18.         }
  19.         public void fun(){
  20.                 System.out.println("覆写了父类的fun()方法") ;
  21.         }
  22. }
复制代码


评分

参与人数 1技术分 +1 收起 理由
itpower + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马