Java基础知识(4)-面向对象
我们都听过,Java的面向对象支持的特性有封装、继承和多态,这一章节我们会将讲Java中对于这三种思想的实现,这里我们会说到Java中内置的两个指针:this和super。
封装
封装指外界不能直接改变一个对象的属性,必须通过对象的方法更新对象的属性。根据这个原则,我们在设计POJO类时会将一个属性的访问域设置为private
,将方法的访问域设置为public
。
那么在这里不得不说一个内置的指针:this
。之前我们说过,在使用new
关键字时Jvm
会在堆中开辟一个空间用来存储一个对象,那么this
总是能精准的访问到这块区域。this一共有三种用法。
- this.field:用来定位到实例本身的属性
- this.method():用来定位到实例本身的方法
- this():用来定位到实例本身的构造方法
继承
继承指的是子类可以通过extends
关键字继承一个原有的父类,那么这个子类可以很轻松的拥有父类中所有的属性和方法,但是子类不一定访问的到父类的所有属性和方法。
那么在这里又得说一个内置的指针:super。在构造一个子类的实例的时候,Jvm
一定会先构造一个父类的实例,然后子类的实例的指针会指向父类的实例,这个指针就是super。super也有三种用法。
- super.field:用来访问父类的非私有属性
- super.method():用来访问父类的非私有方法
- super():用来访问父类的构造方法
多态
相信很多人都听过这句话:多态分为编译时多态和运行时多态。引起编译时多态的原因是类与类之间的继承,类与接口之间的实现。引起运行时多态的原因是方法的重载和重写。那么我们一起来看这些知识点。
-
编译时多态
所谓编译时多态就是指把一个对象实例赋给它的接口变量或父类变量
-
继承导致的多态
class A {} public class B extends A { public static void main(String[] args) { A a = new B(); } }
-
实现导致的多态
interface A {} public class B implements A { public static void main(String[] args) { A a = new B(); } }
-
-
运行时多态
-
方法重载导致的多态:一个类的同名方法有不同个数或类型的参数。
public class Test { public int add(int a, int b) { return a + b; } public int add(int a, int b, int c) { return a + b + c; } public int add(String a, String b) { return Integer.parseInt(a) + Integer.parseInt(b); } }
-
方法重写导致的多态:一个子类的方法完全的覆盖了父类的方法叫做方法重写。
class A { public int add(String a, String b) throws NumberFormatException { return Integer.parseInt(a) + Integer.parseInt(b); } } public class B { public int add(String a, String b) throws NumberFormatException { return Integer.parseInt(a) + Integer.parseInt(b); } }
-
-
重载、重写对照表
方法重载 方法重写 发生范围 一个类中 父子类之间 访问修饰符 可修改 子类的访问权限可以大于父类 返回值 可修改 子类的方法返回值可以小于父类 方法名称 不可修改 不可修改 方法列表 一定修改 不可修改 异常列表 可修改 子类的异常列表可以小于父类