s[0]=new Work("");
s[1]=new Student("");
这两句实际上是实例化了Person的两个子类的对象,再把子类的对象赋值给他的父类,因为在JAVA中规定可以声明抽象类的变量。
Person[] s = new Person[2];这句只是把S声明为Person类型的数组并分配内存空间。
而变量S在编译的时候是按照它声明的类型来处理,在运行时则是按照它实际的类型处理。
这是多变态问题
abstract类只专门给别人继承的
它算是继承它类的上级
举例
Object z=new String("asd");
就是这个意思
这样做有利于维护和扩展
你需要写一个类继承并实现抽象类的方法,例如my:Person的
Person() p = new My(); 说是实例化一个抽象类,其实要让他找到实际实现类才行!!这样,抽象类里面的公共属性值可以用,降低耦合!
java中抽象类的实例化其实是实例化 实现了该抽象类的子类,抽象类只是作为引用,
注意:抽象类不能实例化。
比如:
//抽象类 动物
public abstract class Animal {
public abstract void eat(String food);
}
//子类
//鱼
public class Fish extends Animal {
public String name;
public Fish(){}
public Fish(String name) {
super();
this.name = name;
}
@Override
public void eat(String food) {
System.out.println(this.name + "eat:" + food);
}
}
//测试
public static void main(String[] args) {
Animal fish = new Fish("小鱼");
fish.eat("沙");
}
内部的事情是这样的:
1.创建一个名为:objC的引用型变量在栈区。
2.class()这个是类的构造方法,在这里是调用了方法。
3.通过第二步,在堆中创建好对象。
4.把对象的堆地址赋值给objC;