内存图:
示例代码:
package ljy.abcstraccalss;
//一个拥有一个或者多个抽象方法的类,必须显示的用abstract
//来修饰自我,该类为抽象类(也叫被动抽象类)。
public abstract class A {
//抽象类是一个残缺的类,但其仍然拥有构造方法。
void method1(){
System.out.println("method1 is invoked~");
}
void method2(){}
//存在一个方法,这样的实现为空实现,也算实现。
abstract void method3();
//只有方法签名,没有方法体,该方法未实现,必须声明为抽象方法。
}
package ljy.abcstraccalss;
//子类继承抽象父类,子类必须实现父类的抽象方法
//子类才可以脱掉abstract的帽子,子类如果没有实
//现,父类的抽象方法,那么子类即使自身拥有大量
//的额外方法资产,也不能被实例化,因为其体内有
//方法未实现,只能继续用abstract来修饰。
public class B extends A {
void method3() {
System.out.println("Class B method3 is invoked~");
}
}
package ljy.abcstraccalss;
public class Tester {
/**
* @param args
*/
public static void main(String[] args) {
//A a= new A();
//抽象类无法被实例化
B b = new B();
b.method3();
A a =b;
a.method3();
}
}
====================================
Result:
Class B method3 is invoked~
Class B method3 is invoked~
====================================
package ljy.abcstraccalss;
//主动抽象类
//一个类的所有方法都实现了,是可实例化类
//其故意主动地声明自己是抽象类。
//一个类的作者不让使用者去创建这个类的实
//例,其故意申明此类为抽象类。该类的作者
//认为这个类是一个抽象类的概念,没有创建
//实例的意义,该类需要被继承,让后创建子
//类的实例才有意义。
//任何一个类,无论是否有抽象方法,都可以
//用abstract来修饰。(除了final类)
public abstract class Animal {
private String name;
private Integer age;
void sound(){}
void run(){}
}
原创出处:http://blog.csdn.net/u012830807