菜鸟学Java笔记day3

 1,Object类

    java只支持单继承,提供了一个Object类,是所有Java类的根基类。Object中有一个默认的toString()方法,建议所有的子类都重写这个方法。从JVM的角度看内存,用一张表来记录每一个对象在什么位置,这张表用哈希编码来记录,每一个对象都有一个独一无二的哈希编码。并且,通过这个哈希编码可以找到相应的对象。equals()方法,其默认实现是,两个比较的对象是否指向同一对象(等同于a==b),子类重写即可改变其比较内容。String类重写了equals()方法,其作用是比较的字符串对象是否表示了同样的字符序列。
 
2,对象转型(分为向上和向下)cast
    可以使用”变量 instanceof 类名”来判断该引用型变量所指向的对象是否属于某个类或某类的子类。instanceof所测试的不是对象引用,而是实际的对象。
    父类引用指向子类对象,父类引用所见到的只有作为父类的那部分所拥有的成员,而子类自身的变量和方法是看不到的(父类引用不能访问子类对象新自身的成员)。向上转型,子类的对象可以当做父类的对象来使用(upcasting);反之,称为向下转型(downcasting)。
 
3,动态绑定和多态
    动态绑定叫多态,也叫迟绑定,在执行期间(而不是编译期间)判断所引用的对象的实际类型,根据其实际的类型调用其相应的方法。当调用方法的时候,是根据实际类型来确定。动态绑定意味着,new的谁,调用的就是谁的方法。
    多态存在的三个必要条件:1,要有继承;2,要有重写;3,父类引用指向子类对象;满足这几个条件后,当调用父类里被重写的方法是,实际上,new的哪个子类,调用的就是哪个子类中重写的方法。
 
4,abstract关键字
    抽象类和抽象方法
    在多态中,父类中被重写的方法没有实现的必要,所以这个方法只需要定义即可。只有定义没有实现的方法,叫做抽象方法,没有方法体。(抽象方法就是用来被重写的)含有抽象方法的类必须被声明为抽象类,抽象类必须被继承,且不能被实例化。
    抽象类可以包含具体数据和具体方法。
 
5,final关键字
    final的变量值不能被修改,即final变量可读不可写,修饰时位于类型前;
    final的方法不能被重写,修饰时位于返回类型前;
    final的类不能被继承,修饰时位于class前;
    JDK提供的final类有很多,如:String,Math等。
    当一个类被声明为final时,其方法就自动的成为final方法,但是其变量不会成为final变量;

你可能感兴趣的:(object,abstract,动态绑定,final,对象转型)