继承

继承: 面向对象的三大特征之一。类是用来描述事物的,而继承描述的是事物之间的所属关系。

   1.所属关系?

         如果两个类,可以用(is-a)关系描述,比如:有个动物类和小牛类,我们不能说动物是小牛,但是却可以说小牛是动物,此时,这两个类之间就有了所属关系,类之间形成一种关系体系。

   2.这种关系是什么?

         动物类说的宽泛,小牛类是其中一种具体的动物类,小牛类中有动物类的属性和行为(比如,动物都有名字,动物都会休息,小牛也会,其他很多动物都会),小牛类有动物类的属性和行为,我们称这种关系为继承关系。

   3.继承?

         子类共享父类所有的属性和行为。除了父类的私有成员,我们可以通过父类中提供的get,set方法访问。

         父类:也叫基类,超类。  子类:也叫派生类。

   4.具体怎么做?

     先知道有哪些类,类中有哪些属性和方法,再抽取共同的属性和方法,形成父类。子类除了具有父类的基本属性和方法外,还可以有自己特有的方法和属性。子类由子类重新定义父类的成员和子类特有的成员组成。

   注意:子类继承父类,需要关键字extends  格式为:子类名 extends 父类名{ }

   5.当类之间有了继承关系后,子类或父类成员变量有什么影响?

     ·成员变量如果不重名,就正常调用执行。

     ·如果变量重名,程序该怎么调用?

       首先,对象,或方法可以调用成员变量。

       其次,如果通过子类对象访问成员变量,等号左边对象名是什么类型,就访问哪个类的成员变量;如果是成员方法访问成员变量,那么方法在哪个类中,就访问哪个类的成员变量。

       最后,如果找到了就调用,如果没有找到就向父类中找。

    6.如果确定了需求,子类就要调用父类成员变量,怎么办?

      如下代码:可见子类方法中用了super关键字。

 1 class Fu{
 2     int num = 10;
 3 }
 4 class Zi extends Fu{
 5     //重新定义父类的成员变量
 6     int num = 20;
 7     //子类特有的方法
 8     public  void show(){
 9           System.out.println("需要父类的成员变量:"+super.num);
10           System.out.println("子类的成员变量:"+num);
11           
12     }
13 }

        7.那么各类成员方法在调用时有什么影响?

     ·子类和父类成员方法不重名,调用没有影响(先在子类中查找,找到就用,没有找到就去父类找此成员方法)

     ·如果重名(方法声明一样):就说明子类重新定义了父类的方法,称为方法重写(Override)。

       重写的要求:子类重写的方法的修饰符范围要大于等于父类,此方法出现的异常必须比父类的更小,更少。

       因为本来方法重写就是为了满足更多的需求,父类方法的更新、扩充,肯定不能写的比父类的还不好。

  注意:其实在团队开发中,拿到别人的代码,如果自己想要修整,是不能在源代码上改动的,就可以使用方法重写,程序调用时,即继承了他们的方法,没有改动,还扩展了他的功能,满足更多的需求。

    8.那么构造方法会怎么样?

      首先,子类继承父类后,怎么就自动继承了父类的成员呢?那是因为内存中父类空间优先于子类对象产生,即在每次创建子类对象时,系统会先初始化父类空间,再创建子类对象。

      其次,代码是按顺序执行的,哪一行代码做了加载父类空间的事情呢?其实在子类构造方法中的第一行,系统默认添加了一句代码,super();我们知道this()是调用无参构造方法,这个super()也是调用了父类的无参构造方法,这时加载了父类空间。

      最后,我们看到子类继承父类后,共享到父类成员。

注意:子类每个构造方法的第一行都有super();

posted @ 2020-12-17 22:41  转角的遇见  阅读(88)  评论(0)    收藏  举报