1.方法的重写(覆盖Override):

子类继承了父类原有的方法,但有时子类并不想原封不动的继承父类中的某个方法,所以在方法名,参数列表,返回类型(除过子类中方法的返 回值是父类中方法返回值的子类时)都相同的情况下, 对方法体进行修改或重写,这就是重写。但要注意子类函数的访问修饰权限不能少于父类的。也就是在继承关系中,如果子类对从父类继承过来的方法进行改进,变成自己的方法,这种现象就称之为方法的重写或者方法的覆盖。  

重写的要求 :

1、发生在继承关系中

、三同原则:同方法名、同返回类型、同参数表

         3、子类中的覆盖方法不能使用比父类中被覆盖的方法更严格的访问权限。访问修饰符的限制一定要大于被重写方法的访问修饰符(public>protected>default>private)

         4、重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常

代码:

public class Demo8_Extends {
    public static void main(String[] args) {
        Ios8 ios8 = new Ios8();
        ios8.siri();
    }
}


// 1. 苹果7系统
class Ios7 {
    public void call() {
        System.out.println("打电话");
    }
    public void siri() {
        System.out.println("speak English");
    }
}
// 2. 苹果8系统
class Ios8 extends Ios7 {
    public void siri() {
        System.out.println("说中文");
        super.siri();
    }
}

2.方法的重载(Overload):
      在一个类中,方法名相同,参数个数或参数类型甚至是参数顺序不同,跟返回值无关,则叫方法的重载。
重载总结:
  1.重载Overload是一个类中多态性的一种表现
  2.重载要求同名方法的参数列表不同(参数类型,参数个数甚至是参数顺序)
  3.重载的时候,返回值类型可以相同也可以不相同。无法以返回型别作为重载函数的区分标准

面试时,问:重载(Overload)和重写(Override)的区别?
答:方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性。重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同或者二者都不同)则视为重载;重写发生在子类与父类之间,重写要求子类被重写方法与父类被重写方法有相同的参数列表,有兼容的返回类型,比父类被重写方法更好访问,不能比父类被重写方法声明更多的异常(里氏代换原则)。重载对返回类型没有特殊的要求,不能根据返回类型进行区分。

简单记,重载和重写的区别:

重载可以在子父类中,也可以在本类中

重写只能在子父类中(子类重写父类中的方法)

 

3. final关键字修饰类,方法以及变量的特点

* A:final概述

final表示最终的、最后的,可以用来修饰类、方法、属性(变量)

* B:final修饰特点

final修饰的类不能被继承

final修饰的方法不能被重写

final修饰的属性(变量)不能被改变--就是常量的定义方式

4. 多态

 多态指的是多种形态。

继承的表现就是多态。一个父类可以有多个子类,而在子类里可以重写父类的方法,每个子类重写的代码又不同,自然表现的形式就不一样。如果用父类的变量去引用不同的子类对象,在调用相同的方法的时候得到的结果就和表现形式就不一样了,这就是多态。

 

注意:还需要注意一点的是,由父类引用创建的对象,只能调用子类从父类继承的方法,而不能调用自己扩展的方法。