封装、继承、多态是java面向对象的三大特征,封装在这里就不多说了,主要说一下对继承和多态的理解
总结导图:
继承 |
what: 继承可以使得子类具有父类的属性和方法或者重新定义、追加属性和方法等。java中使用extends关键字来实现类的继承机制
语法如下
<modifier> class <name>[extends]<superclass>{... ...}
通过继承,子类自动拥有基类(superclass)的所有成员(成员变量和方法)。另外,java和C不同,java只允许单继承
多态 |
what: 多态,即动态绑定是指在执行期间判断所引用对象的实际类型,根据其实际类型调用其对应的方法。Java实现多态有三个必要条件:继承、重写、向上转型。
正常情况下,Cat c = new Cat(); 就是实例化一个Cat对象,但是如果是这样呢,Cat c=newBlackCat();
Cat类型的指向Cat的子类BlackCat,那么此时的c不但可以使用父类的共性,还可以使用子类强大的功能,而这被称为向上转型。
重载 |
what: 方法的重载是指一个类中可以定义有相同的名字,但参数列表各不同(即参数的个数或类型不同),另外有一点需要注意的是,重载时返回类型可以不一致,但是仅仅只是返回类型不一致,而参数列表一致时并不会构成重载,这是因为重载的核心在于参数列表的不同。
重写 |
what: 重写是子类对父类的允许访问的方法的实现过程进行重新编写, 方法名一样,返回值和形参都不能改变,覆盖方法体
- 在子类中可以根据需要对从基类中继承来的方法进行重写
- 重写方法必须和被重写方法具有相同方法名称、参数列表和返回类型
- 重写方法不能使用比被重写方法更严格的访问权限
- 重写方法不能声明抛出比被重写方法范围更大的异常类型。
详细说明
重写Override表示子类中的方法可以和父类中的某个方法的名称和参数参数完全相同,通过子类创建的实例调用这个方法时,将调用子类的定义方法,相当于子类将父类中的方法覆盖了,所以重写又名覆盖,子类覆盖父类方法时,只能比父类抛出更少的异常,或者是抛出父类异常的子异常,因为子类可以解决父类的一些问题,不能比父类有更多的问题,访问权限可不可以比父类大
两者区别 |
重载与重写是 Java 多态性的不同表现。
重写是父类与子类之间多态性的表现,在运行时起作用(动态多态性,譬如实现动态绑定)
而重载是一个类中多态性的表现,在编译时起作用(静态多态性,譬如实现静态绑定)。