定义:
class Manager extends Employee{....}
其中已经存在的Employee称为超类/基类/父类,新类Manager称为子类/派生类/孩子类,
多态:一个对象变量可以指示多种实际类型的现象。在运行时能够自动选择调用那个类的方法的现象称为动态绑定。其实就是父类除了自身类对象以外还可以引用子类对象调用子类方法。
一般子类包含父类的方法和数据,并且可以有自己的独特的方法和数据,不过子类如果要和父类的A方法实现不一样的话就要重写A方法,重写的时候如果要访问父类的私有数据比如访问Employee的salary,应该用super.getSalary().但是不能删除继承的任何域或者方法。这里的super和之前的this是有区别的,super不是一个对象的引用,不能将其赋给一个对象。也可以在子类的构造器中用super调用父类构造器方法,比如super(....);因为子类不能直接访问父类私有域,所以可以通过调用父类构造器进行初始化,如果子类没有显示的调用父类构造器,则会默认调用父类的无参数构造器,如果父类没有无参数构造器,会报错。
调用构造器的语句只能作为另一个构造器的第一条语句出现!
Manager manager=new Manager("cm",1200);
Employee[] staff=new Employee[3];
staff[0]=manager;
staff[1]=new Employee("张三",10000);
staff[2]=new Employee("李四",20000);
for(Employee e:staff){
输出....
}//这里对象e就实现了多态,根据staff对象的不同调用不同的方法。
继承可以多层次
多态:
我定义了一个子类Cat,它继承了Animal类,那么后者就是前者是父类。我可以通过 Cat c = new Cat(); 实例化一个Cat的对象,这个不难理解。
但当我这样定义时: Animal a = new Cat();
表示定义了一个Animal类型的引用,指向新建的Cat类型的对象。由于Cat是继承自它的父类Animal,所以Animal类型的引用是可以指向Cat类型的对象的。
那么这样做有什么意义呢?因为子类是对父类的一个改进和扩充,所以一般子类在功能上较父类更强大,属性较父类更独特, 定义一个父类类型的引用指向一个子类的对象既可以使用子类强大的功能,又可以抽取父类的共性。
所以,父类类型的引用可以调用父类中定义的所有属性和方法,而对于子类中定义而父类中没有的方法,它是无可奈何的; 同时,父类中的一个方法只有在父类中定义而在子类中没有重写的情况下,才可以被父类类型的引用调用; 对于父类中定义的方法,如果子类中重写了该方法,那么父类类型的引用将会调用子类中的这个方法,这就是动态连接。也可以叫做动态绑定。
动态绑定:1、假设调用方法f(param..),在类的方法中找到所有需要调用的方法,在父类中找到public名字也是f()的方法;2、
在1中的方法中找到参数类型一致的方法使用。
抽象类:
包含一个或多个抽象方法的类本身必须被声明为抽象的,但是抽象类也可以包含具体的数据和方法。建议将通用的域和方法9*在抽象类中。·即使不包含抽象方法,也可以声明为抽象类。抽象类不嫩被实例化,但是可以实例化子类的对象,
OBJECT类:
JAVA反射:
未完。。