抽象类不能new对象的,只能被子类继承。如果抽象类中方法是抽象方法,那么子类必须实例化此方法,否则不需要去此方法!抽象类没有构造方法,也不能实例化.
静态变量,因为初始化的时候会在内存中开辟一块地方存储,所以不论对他进行什么操作,都是对同一个内存进行操作,也就是说对这个静态变量操作的结果是会累加的。
比如 下面的程序:
public class Ruckus {
public static void main(String[] args) {
// new dog的时候会实例化Counter类的count变量,count=1,static变量只初始化一次,所以再就new
// dog()的话就不会再初始化count变量了.
Dog dogs[] = { new Dog(), new Dog() };
for (int i = 0; i < dogs.length; i++) {
// 这里对count变量进行++,是的count=2;因为count是static的,所以对他的操作会累加,否则将不会累加,只是初始化。
dogs[i].woof();
int num = Dog.getCount();
// 也就是说如果count不是静态的,那么这里的num每次都会是0
System.out.println(num);
}
Cat cats[] = { new Cat(), new Cat(), new Cat() };
for (int i = 0; i < cats.length; i++)
cats[i].meow();
System.out.print(Dog.getCount() + " woofs and ");
System.out.println(Cat.getCount() + " meows");
}
}
class Counter {
private static int count = 0;
public static final synchronized void increment() {
count++;
}
public static final synchronized int getCount() {
return count;
}
}
class Dog extends Counter {
public Dog() {
}
public void woof() {
increment();
}
}
class Cat extends Counter {
public Cat() {
}
public void meow() {
increment();
}
}
每次new一个Dog对象,或者是Cat对象,并不会对count的值产生影响,但是
woof()
这个方法调用一次就会给count加1,那么因为这样的操作对static变量来说是累加的,所以count会一只加到5才算结束。
结果可想而知:5 woofs and 5 meows