黑马程序员技术交流社区

标题: 抽象类中能有构造方法吗,怎样调用的? [打印本页]

作者: 心?=忐§忑]    时间: 2014-3-31 15:47
标题: 抽象类中能有构造方法吗,怎样调用的?
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() ;
        }
}
作者: osully    时间: 2014-3-31 15:58
抽象类中的构造函数 是用来初始化 属性等等的
可以让子类直接使用
作者: Aimer_WJY    时间: 2014-3-31 16:00
父类-->A
子类-->B
覆写了父类的fun()方法
从运行结果上就可以证明抽象类中是可以有构造方法的,但是是不能实例化对象的。
作者: wconho    时间: 2014-3-31 17:15
调用子类构造方法都会调用它的直接父类的构造方法
使用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. }
复制代码







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2