一、其他知识理解 1.javabean javabean是一种公共类,有无参的构造方法,并且其中的private私有属性都有其get/set方法 2.Eclipse中debug的使用 调试程序:硬看+System eclipse的debug文档:设置断点(双击程序左边,小关卡)。step over 一行一行的走 。step into 进入方法中。step return 推出方法。 二、方法的重写 1.方法重写 名字参数列表都相同。 子类中对父类已定义的方法进行重写,那么运行时子类调用的方法就回覆盖父类的方法 2.方法重写的规定 子类的权限修饰符,不能小于父类的权限修饰符。 即父类为private,子类不能重写方法,子类本身并看不到父类的private方法,子类写的无论什么权限方法都只是重新定义方法,而非重写。 父类为缺省,子类必须为缺省或protected或public,因为若子类比父类权限小,即若子类的方法只能在类内使用,那么类外同一包内父类的方法权限够,此时产生歧义。故子类方法权限必须不小于父类方法的权限。 子类父类同名同参的方法,要么都声明为非static,要么都声明为static(不是重写) 返回值类型 若为基本数据类型或者void,则子类保持和父类相同的数据类型 若为A类的类型,则子类的类型可以是A或者A的子类。即子类包含所有父类的属性和方法,可以返回。 throws 异常类型,子类异常类型不大于父类的异常类型 三、补充protected 1.不同包的子类可以使用 正常情况下,private和缺省在不同包都用不了,public在不同包都可以用,而protected可以在同包以及不同包的子类下可以使用 2.对四种权限的再理解 类的权限:缺省 同一包内 可以new 。public 不同包内 可以new。 方法或属性的权限:在其他类中声明本类时可以访问到的属性和方法的权限。即四种权限是在其他类中利用本类的对象.属性或对象.方法访问的权限 四、super关键字 1.why 子类重写了父类的方法,而子类还想调用父类的方法 2.what super可以理解为父类的,this理解为本类的 3.how super可以调用父类的属性,方法,构造器。super.id ,this.id。 super显式调用父类的,当子父类同名时,又想调用父类,必须使用super 重写方法的调用:正常来看,子类重写后只会调用子类重写的方法,而子类调用父类原方法是用super即可 super调用构造器:在子类中,若无显式定义构造器,则会默认一个无参构造器。在父类中,同样如此。故在子类中的构造器中,首行便会自动调用父类构造器即super()。 若子类显式调用父类构造器,必须this和super二选一,必须放在首行。子类用了this构造器,最终也会调用super构造器。 即this构造器先在本类中找,找到后this构造器最终还会再向父类找。super构造器先向父类找,再向父类的父类找。即n个构造器,可能会有n-1个this构造器,但总会有一个直接调用super构造器。 注意,在父类中显式声明一个构造器有形参,那么在子类中构造器默认使用super()无形参的方式即父类的默认构造器不再提供,此时报错。子类有默认构造器,而父类无默认构造器。解决方法除非显式提供父类构造器super(args)。 若子类无构造器,默认student(){super()} 4.子类对象实例化的过程 从结果上来看 子类继承父类则获取了父类声明的属性和方法,创建子类对象后,堆中会加载所有父类的属性和方法 从过程来看 子类构造器直接或间接调用父类构造器,进而调用父类的父类的构造器,直到调用了java.lang.object类的空参构造器,即子类加载过所有父类的类结构,可以在内存中看到并且调用 虽然子类调用了父类的构造器,但并未构造对象,自始至终都是一个对象 注意:getbalance()是获取一个值,不能getbalance-=amount这样来修改balance,必须使用setbalance来获取。 五、多态性(对象多态性) 1.why:传入形参时如果不利用父类,所有子类都要创建一个方法,那么会重载很多,如果利用父类即可加载子类,形参多态性。即要定义方法体中规范的步骤来操作数据 2.what:Person p2 = new Man();即成为子类对象的多态性,利用父类的类型来指向子类的对象即子类对象赋给父类引用。 3.how:Person p2 = new Man();p2.method()只能使用父类的方法或者重写父类的方法。不能使用子类独有的方法。即虚拟方法调用 4.编译时,只能调用父类声明的方法,而在执行期实际执行的是子类重写的方法。编译看左,运行看右。 5.使用前提:类是继承关系,有重写方法。 6.多态性只能使用方法,不能使用属性,即子类定义id,父类定义id,此时并不构成属性重写即无多态性。 7.虚拟方法:编译父类方法,运行子类方法,父类根据赋给他的不同子类对象,动态调用子类重写的方法,运行时才知是new的谁。 8.重载和重写:重载调用地址时编译就已经绑定了谁用谁。而重写在运行时才知道谁用谁。前者为静态绑定,后者为动态绑定。 9.动态绑定和静态绑定:静态绑定即编译时就确定用哪种方法如重载。动态绑定即只有程序到执行阶段才能确定用哪种方法比如重写。