Java之继承,super,this详解

版权声明:本文为博主原创文章,未经博主女朋友允许不得转载。 https://blog.csdn.net/qq_26442553/article/details/72939357

                     面向对象之继承详解

1.为什么要有类的继承性?(继承性的好处)

继承性的好处:①减少了代码的冗余,提供了代码的复用性
 *  ②提高了程序的扩展性 
 *  ③(类与类之间产生了联系)为多态的使用提供了前提
2.继承性的格式:
class A extends B{
   }     extends:拓展
 *       子类(SubClass:A

 *       父类、超类、基类(SuperClass:B

3.子类继承父类以后有哪些不同?
   1.子类通过继承父类,就可以获取父类中声明的结构:属性、方法。(不能说包括构造器,子类不能直接用父类的     构造器,只能在在自己的构造器中调用父类的构造器) 可能会由于封装性的影响,导致在子类中不能直接调用父类中声明的属性或方法,但是子类   中确实获取到了父类中声明的属性和方法。可以用setter和getter方法调用。

2.子类可以在父类的基础上,再定义自己特的属性、方法。从这个角度说:子类的功能要不少   于父类的功能。不同于集合与子集的概念,子类不是父类的子集。。子类可以看做是一个更   加具体更加强大的父类异形。

4.java中继承性要求与注意事项
     1.子类与父类是相对的概念。如A继承B ,B又继承了C,A是C的子类 ,但不是直接子类。子     类可以通过继承的方法获取直接父类和所的间接父类中的所的属性、方法。
     2. 一个父类可以由多个子类继承;但是一个子类只能有一个父类(java的单继承性)
     3.如果一个类没有显式的继承另一个类的话,我们说其默认继承于:java.lang.Object类。

        任何一个类,都直接或间接的继承于Object类.不包含Object类本身。

5.方法的重写

  1.什么是方法的重写(override 或 overwrite)?
         了类的继承以后,我们可以考虑方法的重写(override 或 overwrite)
         方法的重写:子类中可以对父类中同名同参数的方法,实现“覆盖”或“覆写”
                即:①要有继承,子类重写父类中的方法
                       ②重写的方法名要要一样
                      ③重写的方法参数列表要一样。

2.举例:
class Circle{
public double findArea(){//返回圆的面积
}
}
class Cylinder extends Circle{
public double findArea(){//返回圆柱的表面积
}
}
3.方法重写具体规则:(重写必须遵守的5个准则)
         方法的定义:权限修饰符  返回值类型  方法名(形参列表) throws 异常类型{ 方法体; }
 * 
 *       1,要求子类重写的方法的方法名、形参列表必须与父类被重写的方法的方法名、形参列表相同。

 *        2,要求子类重写的方法的返回值类型 不大于 父类被重写的方法的返回值类型
 *                 例:父类的方法的返回值类型:Object类 。 子类的的方法的返回值类型:Object(yes)
 * 父类的方法的返回值类型:Object类 。 子类的的方法的返回值类型:String(yes)
 * 父类的方法的返回值类型:void。 子类的的方法的返回值类型:void(yes)
 * 父类的方法的返回值类型:double。 子类的的方法的返回值类型:int (no)
 *         3 ,要求子类重写的方法的权限修饰符 不小于父类被重写的方法的权限修饰符
 *       我们不认为子类可以重写父类中权限为private的方法。    
 *         4,要求子类重写的方法抛出的异常类型 不大于 父类被重写的方法抛出的异常类型   
 *         5,子类与父类同名同参数的方法要么同时为static的,要么同时为非static的。
4.面试题:

方法的重载和方法的重写的区别?

        方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被"屏蔽"了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。


6.关键字super详解

    1 .super 可以用来调用的结构:属性、方法、构造器
       super可以理解为:父类的
,super的使用必须要有继承。是子类去操作调用父类的中的属性,方法构造器等

   2.super调用属性、方法:
     1.有了继承以后,我们可以在子类的方法或者构造器中,通过"super.属性"或者"super.方法"的方式,
       显式的调用父类中声明的属性和方法。
     2.很多时候我们是可以省略"super."的声明的。但是当子类和父类中同名的属性,或者子类重写了父类的
       方法时,我们必须显式的使用"super."调用父类中同名的属性,或者是父类中被重写的方法。
      注意:如果子父类中同名的属性,不会出现覆盖的(重写对属性没有用)。

   3.super调用构造器:
 *    1通过在子类的构造器中使用"super(形参列表)"的方式,显式的调用父类的指定构造器
 *    2"super(形参列表)"必须声明在构造器的首行!
 *    3在子类某一个构造器中,最多声明一个"super(形参列表)"。
 *    4在一个类的构造器中,不可能同时出现调用"super(形参列表)"和"this(形参列表)"
 *    5如果在一个构造器的首行,没有显式的声明"super(形参列表)"或"this(形参列表)",那么系统
 *    默认调用的是:"super()"  ---->建议:声明一个类时,提供一个空参的构造器。
      6.如果有多重继承的话,super只能调用直接父类的构造器或者属性方法也是直接父类的,最近的。

    4.this和super使用的总结
     1.子类中所有的构造器默认都会访问父类中空参数的构造器,子类必然调用父类构造器。
     2.当父类中没有空参数的构造器时,子类的构造器必须通过this(参数列表)或者super(参数列表)语句指     定调用本类或者父类中相应的构造器,且必须放在构造器的第一行
      3.如果子类构造器中既未显式调用父类或本类的构造器,且父类中又没有无参的构造器,则编译出错
      4.一个构造器中只可以有一个super()或者this(),两者不可共存,且都要在第一行。

      

     5.思考:super()或者this():为什么一定要定义在第一行?
        因为super()或者this()都是调用构造器,构造器用初始化的,所以初始化要先完成,不然下面对属性等操作没有意义.


阅读更多
换一批

没有更多推荐了,返回首页