一、继承

1、在java编程中会遇到两个或者多个类中存在多个代码重复,这时我们就需要在这
     两个或多个类中寻找他们的共同特点,然后寻找一个大的类别来包括,他们的共 
     同属性和方法,这样就出现了继承。
 2、我们大类别叫做“超类”或者“基类”不过通俗叫法我们叫做“父类”,小类别叫
    做“子类”.
 3、小类别继承大类别内非私有的成员。
      注意:a、 私有的属性可以通过set/get方法来实现对其的使用,但这不属于继承。
            b、构造函数无法继承,因为构造函数的函数名要与父类的函数名保持
                一致, 如果继承下来语法不符。
            c、个人觉得 父类的私有函数虽然无法继承,不过可以利用父类中的
                非私有函数进行调用。
 4、java中的继承是单继承  不能写成  class Son extends Father , GrandFather
    但是可以是多层继承    例如:class Father extends GrangFather
                                 class Son extends Father
 5、继承要满足is-a关系     老师是人   不能 人是老师 也不能   dog is a person
 6、继承要使用  extends 关键字

二、子类究竟可以从父类中继承什么?

1、子类在父类中继承的是  父类中非私有的成员。
 2、不可继承方法:
        构造方法不能继承
        私有方法不能继承
 3、可继承方法
        非私有的方法
 4、非私有方法可以继承  
    私有属性不可继承  但可以用set/get方法来使用
 5、私有属性子类没有继承权但有使用权
 6、子类可以有自己的特有属性和方法

三、创建子类对象时的内存分配图

java封装继承的例子 java封装继承多肽_父类


四、继承关系中的方法

1、父类非私有的方法 除构造方法 子类都能继承
2、子类如果不想用父类中的方法也可以进行方法重写。
3、方法重写
   A、方法重写要保证方法名、 参数类型、顺序、个数完全一样
   B、方法重写要保证 返回值类型 与其父类的类型相同或者是其子类。
   C、方法重写要保证 修饰符 与其父类型相同或者比父类的权限要大。
   方法重写最好与其父类保持完全一致,不会出错

五、super关键字

1、super 关键字    表示子类堆中存在父类空间 
2、super 关键字 只能用来调用父类的非私有成员
    A、非私有属性       super.属性名
    B、非私有函数       super.函数名
    C、构造方法      可以在子类中调用父类的构造方法
                      super()无参构造方法
                      super(实参)有参构造方法
 3、在子类构造方法中对父类的私有属性进行赋值
     A、set方法
     B、super 调用父类的构造方法(有参)

六、一切类的祖先:Object

一切类的最顶端的父类      所有的类都自动继承Object类

七、多态

1、多肽可以保证程序的拓展性和可维护性
  2、多肽可以减少代码的重复性
  3、要遵循is-a语句

八、向上转型

1、父类名 对象名=new 子类名();
   2、作用:
           主动方方法的参数要使用被动方父类的类型,实参传给形参的过程。
   3、实现多肽的步骤
       A、被动方必须有继承关系
       B、子类需要重写父类中的功能方法
       C、主动方的方法的参数类型要设置为被动放的父型类型。
   4、例如    Father  f=new Son();//多肽的声明
               f.eat();//这里执行的是子类中的eat函数

java封装继承的例子 java封装继承多肽_java_02

注释:printer为父类,BlackPrinter为子类    在主动方的函数中定义一个父类
然后在测试类中传一个子类对象。
注意:如果子类对象中还传参,上述子类要用super调用父类的有参构造方法。
      因为构造函数不继承。

九、向下转型

1、向上转型不能调用子类函数的特有方法,因此用向下转型
 2、如图所示  父类名   对象名=new 子类名();
             子类名   变量名=(子类名)对象名;
               变量名.特有方法名();
       涉及到强制类型转换。
3、解决向上转型的弊端。

十、多态的细节

1、对于非私有的属性,如果父类和子类都有同名的一个属性,再向上转型的时候, 
         调用的是父类中的属性。
        编译和运行看左边(父类)。
     2、对于非私有的方法,如果父类和子类都有同名的一个函数(方法重写)在向上转型 
         的 时候,调用的是子类的方法。
        编译看左边(父类)
        运行看右边(子类)
       注意:这就解释了在多肽中子类必须重写或者继承父类的方法;
             独有方法父类不存在,无法编译  所以用向下类型转换!!!!