抽象类不能被实例化,但是其非抽象子类被NEW出来的时候依然能调用父类的构造方法是么?另外是不是可以说抽象类中非抽象的方法和变量都可以被子类所调用,只要不去NEW这个抽象类本身就可以了?谢谢大家!

解决方案 »

  1.   

    子类被new出来不就是要调用父类的构造方法吗?
    如果父类中非抽象的方法和变量被继承下来,当然可以用他们了。
      

  2.   

    子类是可以调用抽象类的非抽象构造函数。子类也可以调用抽象类中的非抽象方法!就是不能去new它~!
      

  3.   

    构造函数没有抽象的吧!
    抽象类中非抽象的方法和变量除了private修饰的都可以被子类所调用!
      

  4.   

    抽象类可以有构造方法,是给子类用的,子类可以用super()调用父类的构造方法
    如果一个类里有抽象的方法这个类必须是抽象类,不能创建对象
    但反过来说是错的
    子类中拿一个有实现的方法覆盖父类中没有实现的方法叫实现
    父类中的的所有抽象方法必须被子类中的方法全部实现(这里的子类不是抽象的)
    抽象的方法把声明和实现分离,留给子类去实现
      

  5.   

    抽象類不能被實例話是可以理解的,因為它的抽象方法知識提供一種接口,一種標準,來表達一下我的子類應該具有怎樣的能力。至于他們這些能力有多大,抽象類本身就不管了。抽象類的子類如果不是抽象類的話,可以被實例話,子類可以overloead或者overwrite父類的方法。至于父類的變量要區分很多情況。
      

  6.   


    public class AbstractClass extends abstr{ /**
     * @param args
     */
    public static void main(String[] args) {

    AbstractClass ab = new AbstractClass();//抽象类不能被实例化,但是其非抽象子类被NEW出来的时候依然能调用父类的构造方法
    System.out.println(ab.i);
    ab.method2();//抽象类中非抽象的方法和变量都可以被子类所调用
    ab.setIi(1);
    System.out.println(ab.getIi()); } @Override
    void method1() {
    System.out.println("method1");

    }}abstract class abstr {
    private int ii = 8;
    int i = 7;
    abstract void method1();

    public void method2(){
    System.out.println("method2");
    } public int getIi() {
    return ii;
    } public void setIi(int ii) {
    this.ii = ii;
    }

    }
    楼主说的 是正确的
    抽象类中的构造方法就是用于 其非抽象子类 实例化的