JAVA中抽象类的一些总结

  1. 抽象类和普通类一样,有构造函数。抽象类中有一些属性,可以利用构造方法对属性进行初始化。子类对象实例化的时候先执行抽象类的构造,再执行子类构造。
  2. 抽象类不能用final声明。因为抽象类必须有子类继承,所以抽象类不能使用final定义。
  3. 抽象类不能用static进行声明,但是抽象类中的内部类可以使用static声明。
abstract class A
{
    static abstract class B
    {
        public abstract void print();
    }
}

class X extends A.B
{
    public void print()
    {
        System.out.println(this.getClass());
    }
}


public class Hello
{
    public static void main(String[] args)  throws Exception
    {
        A.B ab = new X();
        ab.print();
    }
}

输出:class X

 4.抽象类和普通类一样,可以有static方法,且可以通过类名称.方法名的方式进行调用

abstract class A
{
    public static void test()
    {
        System.out.println("抽象类中的static方法");
    }
}


public class Hello
{
    public static void main(String[] args)  throws Exception
    {
        A.test();
    }
}

5. 有些时候抽象类只需要一个特定的系统子类操作,可以对外部隐藏抽象类的实现。这样的设计在系统类库中比较常见,目的是为了隐藏我们不需要的子类实现。

abstract class A
{
    public abstract void print();

    private static class B extends A
    {
        public void print()
        {
            System.out.println("打印消息测试");
        }
    }

    public static A getInstance()
    {
        return new B();
    }
}


public class Hello
{
    public static void main(String[] args)  throws Exception
    {
        A a = A.getInstance();
        a.print();
    }
}

6. 观察下面的输出。

abstract class A
{
    public A()
    {
        this.print();
    }

    public abstract void print();
}

class B extends A
{
    private int num = 100;
    public B(int num)
    {
        super();
        this.num = num;
    }

    public void print()
    {
        System.out.println(this.num);
    }
}


public class Hello
{
    public static void main(String[] args)  throws Exception
    {
        B b = new B(30);
    }
}

上面代码输出: 0

原文地址:https://www.cnblogs.com/kuillldan/p/5905955.html