- 抽象类和普通类一样,有构造函数。抽象类中有一些属性,可以利用构造方法对属性进行初始化。子类对象实例化的时候先执行抽象类的构造,再执行子类构造。
- 抽象类不能用final声明。因为抽象类必须有子类继承,所以抽象类不能使用final定义。
- 抽象类不能用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