面向对象三个特性:继续(Inheritence)、封装(Encapsulation)、多态(Polymorphism)
类包含了数据与方法,将数据与方法放在一个类中就构成了封装。
② 调用类的构造方法
③ 将生成的对象的地址返回
如果一个类包含了属性和方法,那么该类的每一个对象都有自己的属性,但是无论有多少个对象,这些对象共享一个方法。
构造方法重载时,只需看参数即可。
在一个构造方法中调用另外一个构造方法,可以使用this(),this()中的参数根据调用的构造函数确定。this()语句必须作为构造方法的第一条语句。
Java是单继承的,意味着一个类只能继承一个父类,使用extends关键字。
生成子类对象时,Java默认地首先调用父类的不带参数的构造方法,并执行该构造方法,生成父类的对象。接下来才是调用子类的构造方法,生成子类的对象。(即是想要生成子类对象,必须先生成父类的对象,没有父类的对象就没有子类的对象)
super表示对父类对象的引用。
使用了super显示的调用父类的某个构造方法后,那么在执行的时候就寻找super()对应的够杂方法而不再寻找父类的不带参数的构造方法。super必须作为构造方法的第一条执行语句。
② 父类没有的,子类可以有
③ 父类有的,子类可以改变
② 方法和属性可以被继承
③ 子类的构造方法隐式地调用父类的无参构造方法
④ 当父类没有不带参数的构造方法时,子类需要使用super关键字来显示调用父类的构造方法。super指的是父类的引用
⑤ super关键字必须是构造方法中的第一句。
当两个方法形成重写关系时,可以在子类中通过super关键字调用父类被重写的方法。此时的super关键字不必放在第一句,而是根据逻辑决定。
多态指的是父类型的引用可以指向子类的对象。(苹果是水果,足球是球)
Parent p = <span style="PADDING-BOTTOM: 0px; BORDER-RIGHT-WIDTH: 0px; BACKGROUND-COLOR: transparent; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; COLOR: rgb(127,0,85); BORDER-LEFT-WIDTH: 0px; FONT-WEIGHT: bold; PADDING-TOP: 0px" class="bh_code_a_Java_keywords">new</span> Child<span id="58b248e5-c1a9-41f1-b589-cd8f172917df" class="GINGER_SOFTWARE_mark">(</span>); p<span id="d5d11428-f1be-4039-b200-7153ebf2461c" class="GINGER_SOFTWARE_mark">.</span>execute<span id="5ed9138b-633e-4f3d-b022-0e1d3a09cbfa" class="GINGER_SOFTWARE_mark">(</span>);
当使用多态调用方法时,首先检查父类中是否有被调用的方法,如果没有则编译出错;如果有,再去调用子类的方法。
① 向上类型转换(upcast):将子类型转换成父类型。对于向上类型转换,不需要显示指定:
Parent p = <span style="PADDING-BOTTOM: 0px; BORDER-RIGHT-WIDTH: 0px; BACKGROUND-COLOR: transparent; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; COLOR: rgb(127,0,85); BORDER-LEFT-WIDTH: 0px; FONT-WEIGHT: bold; PADDING-TOP: 0px" class="bh_code_a_Java_keywords">new</span> Child<span id="0b77eaab-4f88-4db7-b61f-6533311f4a99" class="GINGER_SOFTWARE_mark">(</span>);
② 向下类型转换(downcast):将父类型转换为子类型。对于向下类型转换,必须要显示指定,使用强制类型转换:
Parent p = <span style="PADDING-BOTTOM: 0px; BORDER-RIGHT-WIDTH: 0px; BACKGROUND-COLOR: transparent; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; COLOR: rgb(127,0,85); BORDER-LEFT-WIDTH: 0px; FONT-WEIGHT: bold; PADDING-TOP: 0px" class="bh_code_a_Java_keywords">new</span> Child<span id="77e3b40a-6c08-491a-8363-0fe21982e750" class="GINGER_SOFTWARE_mark">(</span>); Child child = (Child<span id="9901b1dd-b684-42ed-9173-a01406af7d24" class="GINGER_SOFTWARE_mark">)</span>p;
以下的编译不会出错,运行时报错:
Parent p = <span style="PADDING-BOTTOM: 0px; BORDER-RIGHT-WIDTH: 0px; BACKGROUND-COLOR: transparent; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; COLOR: rgb(127,0,85); BORDER-LEFT-WIDTH: 0px; FONT-WEIGHT: bold; PADDING-TOP: 0px" class="bh_code_a_Java_keywords">new</span> Parent<span id="ab638d33-b2ba-4ea5-82b0-780e4eb728aa" class="GINGER_SOFTWARE_mark">(</span>); Child child = (Child<span id="5f517eda-dce3-4b82-b61d-d9b4d6fb020f" class="GINGER_SOFTWARE_mark">)</span>p;