JAVA学习笔记(三)
JavaBean的基本需求
属性:private Type ***
提供属性的存取方法
取方法命名:get***
存方法命名:set***
提供缺省(无参)的构造器
继承
Java不能多重继承,可以多层继承,Java.lang.Object类是所有类的根
继承类和超类直接应该存在一种 is-a的关系,即继承类是超类的一种;
父类引用指向子雷对象时,如果子类重写了父类方法,那么调用的是子类的方法;
类里只能包含成员变量和成员函数;
关于父类引用指向子类对象()
1、如果想实现多态,那么必须有三个条件:父类引用、子类对象、方法覆盖;
2、没有方法覆盖,那只能解释为父类引用去访问一个子类的方法,当然父类引用没有这么大范围的权限;
PS:多态实际上是一种机制,在编译时刻会生成一张虚拟表,来记录 所有覆盖的方法,没有被覆盖的方法是不会记录到这张表的,若一个父类引用调用了没有覆盖的子类方法,那么是不符合该表的,编译时会报错。在执行程序的时候,虚拟机会去这张虚拟表中找覆盖的方法,比如引用中实际上存在的是一个子类对象引用,那么就会找子类中的相应的覆盖的方法来执行。
覆盖、重载、多态
上边已经提到了这几个概念,现在再进一步的说说;
一、覆盖
1、覆盖方法必须有和被覆盖的方法具有相同的方法名称,参数列表和返回类型;
2、如果在子类中调用父类中被覆盖的方法用super
3、覆盖方法时,不能使用比父类中被覆盖的方法更严格的访问权限;
4、只有存在继承才能有覆盖这个概念;
//临时想到一点:构造函数只能在构造函数中调用;
二、重载
只能通过参数个数,参数类型,参数位置来区分,不能通过返回类型区分;
作用:
1、同名函数,实现多个功能;
2、因为构造函数必须与类名同名,通过重载实现实例化不同功能的对象(这句话表达的不太明白,以后有合适的说法再改)
三、多态
多态提供了另一个层面上的接口与实现的分离,也就是把做什么和怎么做分开来,多态不仅能改善代码的结构,提高其可读性,而且能让你创建可扩展的程序。
向上转型(upcasting)
动态绑定(dynamic binding)
向上转型会狭化接口
编译时、检查引用所指的方法;
运行时、实际调用的是子类对象所指的方法;