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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 程旦 中级黑马   /  2012-4-24 21:13  /  6289 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

我今天忽然发现抽象类有构造函数  这下闪到我了  在我的观念中 抽象类不能被实例化 子类又不能继承构造函数,那我就郁闷了 那抽象类的构造函数有啥作用吗

7 个回复

倒序浏览
抽象类虽然自身不可以实例化,但是其子类覆盖了所有的抽象方法后,是可以实例化的,所以抽象类的构造函数,适用于给其子类对象进行初始化的
回复 使用道具 举报
构造函数用于初始化,好像这个,其实类都有构造函数,就算没写出来,也是有默认的构造函数的
abstract   class   A   {
private int a=0;
A(int a)   { this.a=a}
}
class B extends A
{
B(){
super(12);
}
}
回复 使用道具 举报
1、   没有构造函数,类的字段如何被初始化,就算你不写构造函数,系统也会给你个默认的
2、base()????   ,调用默认的基类构造函数  l有如下例子;

public   abstract   class   Shape
{
public   abstract   double   Area();
}

public   class   Ellipse:Shape
{
public   override   double   Area()   
{
return   2+8;
}
}



回复 使用道具 举报
构造函数被用来建立一个对象实例,但是你不能建立一个抽象类型的实例,抽象类型的构造函数就仅仅能够被它的继承类型使用
如果在父类中(也就是抽象类)中显示的写了有参数的构造函数,在子类继承是就必须写一个构造函数来调用父类的构造函数
如果父类中有没有参数的构造函数,在子类中可以不显示的写父类的构造函数,Java会自动调用没有参数的构造函数
回复 使用道具 举报
构造函数是对象的基本,没有构造函数就没有对象。
若果在父类中(这里就是你的抽象类)中显示的写了又参数的构造函数,在子类继承是就必须写一个构造函数来调用父类的构造函数。
Java代码  
abstract class Person {   //定义一个抽象类,必须被继承   
     
    Person(int i) {   
         
   }   
}   
  
public class Student extends Person {   
      
    Student() {   
     super(int i)://必须显示的调用父类构造方法//super代表父类对象   
  }   
}  

abstract class Person {   //定义一个抽象类,必须被继承
  
    Person(int i) {
      
   }
}

public class Student extends Person {
   
    Student() {
     super(int i)://必须显示的调用父类构造方法//super代表父类对象
  }
}
抽象类可以有构造方法,构造方法不可继承,但是可以供子类用super()或者super(参数,参数。。。。)调用。
回复 使用道具 举报
抽象类可以由构造函数的,当子类继承父类后,用子类去构建对象的时候,子类构造函数中会有个默认的super指向父类,调用父类的构造函数super()(无参构造函数)。注意如果定义了父类的有参构造函数,则调用父类无参构造函数会失败的。在java中只要是类,就有构造函数。抽象类体现的就是一种设计模板,毕导是这么说的。抽象类的作用一个是给本类初始化,一个是给子类调用时使用,也是初始化的意思。
  1. package sui.day16;

  2. abstract class Fu {
  3.          int num = 3;
  4.         Fu() {
  5.                 System.out.println("父类初始化啦!num=" + num);               
  6.         }
  7.         abstract void show();
  8. }

  9. class Zi extends Fu{       
  10.         Zi() {
  11.                 System.out.println("子类初始化啦");
  12.         }
  13.         void show(){
  14.                 System.out.println("子类实现show方法了耶:num= "+num);
  15.         }
  16. }
  17. public class Test {

  18.         /**
  19.          * @param args
  20.          */
  21.         public static void main(String[] args) {               
  22.                 new Zi().show();
  23.         }
  24. }
复制代码





16.png (9.76 KB, 下载次数: 224)

子父类构造

子父类构造
回复 使用道具 举报
抽象基类必须有构造参数,因为抽象类虽然不能实例化这个类型,但是子类继承了抽象父类的属性,也就是说,子类是父类的超集,所以,实例化子类时,必须初始化父类的那一部分,而这个工作就交由抽象父类的构造函数来完成了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马