继承,多态,重写,重载

来源:互联网 发布:在淘宝买到假药怎么办 编辑:程序博客网 时间:2024/06/04 18:02


1、Java继承中属性覆盖

            请参考此博客:Java子类父类属性的覆盖

重点:(属性的覆盖是针对子类与父类有相同的属性名而言的)

<1>final常量可以被覆盖

<2>静态变量和静态常量(static final)属于类,不属于对象,因此它们不能被覆盖。

<3>friendly(默认情况,不写)、protected和public修饰符并不影响属性的覆盖。

<4>由于private变量不可以被子类继承,受访问权限的限制,它不能被覆盖。

 <5>属性的值取父类还是子类并不取决于我们创建对象的类型,而是取决于我们定义的变量的类型。

ParentClass subClass=new SubClass(); //属性为父类的属性

2、Java方法重写

             请参考此博客:方法能重写,属性能重写吗?

重点:(属性的覆盖是针对子类与父类有相同的方法名而言的)

<1>重载与重写的区别:

  1.如果在子类中定义一个与父类签名相同的方法,就叫做重写,也就是此时子类的方法覆盖了父类的方法。而如果具有相同的方法名却有不同的参数,那么就是重载,重载的目的在于以统一的方式去处理不同类型的数据,在调用方法时通过判断所传递的参数去判断去决定具体调用哪一个方法,这也是多态性的一种体现。  

2. 重载(也叫过载)时只与方法特征有关,那么什么是方式特征呢?一个方法的特征(也可叫方法签名)仅包括方法的名字、参数的个数、类型、顺序(实质上就是参数列表),而不包括方法的返回类型、访问修饰权限与所抛出的异常。

      3. 重写(覆写)是会进一步检查两个方法的返回类型是否相同、访问修饰权限是否缩小(假设public->protected方向是缩小,反之叫扩大)和抛出的异常范围是否扩大。重写时不可以缩小修饰符权限,不可以扩大异常范围。

      4. 重载一般是指在同一个类中多个方法间,但也可重父类的的方法,而重写只发生面父子与子类的方法间。

<2>私有方法(不可以重写)

因为子类不可以继承父类的私有方法,所以即使试着在子类覆写了父类的私有方法,不管访问权限修饰符是什么,在编译时也不会报错

3.java中静态属性和静态方法可以被继承,但是没有被重写(overwrite)而是被隐藏.

  1, 静态方法和属性是属于类的,调用的时候直接通过类名;方法名完成对,不需要继承机制即可以调用;
  (1)如果子类里面定义了静态方法和属性,则这时候父类的静态方法或属性称之为"隐藏";
  (2)如果你想要调用父类的静态方法和属性,直接通过父类名.方法或变量名完成,至于是否继承,子类是有继承静态方法和属性,但是跟实例方法和属性不太一样,存在"隐藏"的这种情况。;
  2,重写的功能是:"重写"后子类的优先级要高于父类的优先级,但是“隐藏”是没有这个优先级之分的。
  3, 静态属性、静态方法和非静态的属性都可以被继承和隐藏而不能被重写,因此不能实现多态,不能实现父类的引用可以指向不同子类的对象。

  4,非静态方法可以被继承和重写,因此可以实现多态。

4,类中所有的private方法都是隐式的指定为final的,如果你试图覆盖一个private方法,编译器不会报错,但其实是相互独立的两个方法。

5. 多态之所以能够实现,依赖于继承、接口和重写、重载(继承和重写最为关键),有了继承和重写就可以实现父类的引用指向不同子类的对象





1 1