黑马程序员---java继承详解

来源:互联网 发布:php zrem 编辑:程序博客网 时间:2024/04/30 15:21
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------


· 一个类继承另一个类 用 extends 关键字,  extends 英文意思为 扩展(一个类继承了一个类 即为 扩展了这个类)

class Dad{  private  int n_private = 1;  int n_friendly = 2;  protected int n_protected = 3;  public int n_public = 4;}class Child extends Dad// child extends dad 表示 class child  大于(成员包含)  class dad{public void f(){// n_private = 10;  错! 父类中的 private变量 也被该子类 继承,但是该子类不能 使用它n_friendly = 20;n_protected = 30;n_public = 40;}}

>> 继承中的构造方法

  <object reference 对象引用 == ObjRef>


  只有调用了构造方法,一个对象才能被搭建起来   classname objectreference = new classname();  调用了默认的构造方法 “classname() { }”

。子类的 构造 过程中 必须 先调用其 父类 的构造方法 原因: 

1.在子类对象里边包含了父类对象,而父类对象的建立也必须调用父类里边的构造方法
2.子类直接获取父类中的数据,在创建子类对象时需要先查看父类对象是如何初始化这些数据的,所以在 子类的构造过程中 首先要调用父类的构造方法;

。子类可以在自己的 构造方法 中使用 super(参数列表) 来调用基类的构造方法 :如果父类有多个构造方法 由于方法重载 所以可以用 super(参数列表) 的
     方式来根据 参数的个数 来判断调用的是哪个构造方法。  如果使用 super(参数列表) 这种方式, 则它必须写在子类构造方法的第一行(先造
 父类才能造出子类)


。使用 this(参数列表) 调用自己本身类的其他的构造方法

。如果子类的构造方法中没有显示的调用基类构造方法,则默认调用基类无参数的构造方法

。如果子类构造方法中既没有显示调用基类构造方法,而基类中有没有无参的构造方法,则编译出错

。一个构造方法中只可以有一条 super(参数列表); 或者一条 this(参数列表);  二者不能同时存在,而且要放在第一行(初始化要首先先完成),

。父类构造函数里边默认也有 super();  因为所有父类 extends Object


继承中的构造方法示例:

class A{protected void print(String s)  // 3行{System.out.println(s);   // 先输出 A()  }A()                      // 7行,所以从这开始执行{print("A()");            // 将 字符串 " A() " 传递给3行的String类型的形参 s,执行完后回到 子类B 中的构造方法 B()-->19行}public void f(){print("A:f()");}}class B extends A{B()        // 19 行 B类 为从 A类 继承来的子类,要创建 子类B,先要调用 父类的 构造方法,{print("B()"); /*    在 子类B 中没有使用 super(); 这种方式来调用父类的构造方法,所以默认调用父类里边    无参数的 构造方法,调用 A();-->7行 调用完 A() 之后 调用从 父类A 中继承来的    方法 print(String s);  输出 B()  执行完后 回到 main()*/}public void f()   // 这里是 方法的重写{print("B:f()");}public static void main(String[] args){B b = new B();  // 第一步 创建一个对象 先调用 构造方法,调用 B()-->19行   执行完后执行下一句b.f();   // 输出 B:f()}}
输出结果:

A() B() B:f() 


附加知识:


>> 访问权限:

访问控制符是对于类的外部而言的,在一个类的内部,所有的 变量 方法 都是透明的。

同一个类   public  protected  包访问控制符(默认不写)  private
同一个包   public  protected  包访问控制符(默认不写)
子类 publicprotected  
任何地方     public


>> super关键字

        使用 super 来引用基类(父类)的成分(方法 变量 等),如: 从父类继承的子类,在对父类的方法进行重写时,如果子类中重写
方法内容的一部分跟父类中的(被重写类)完全一样,那么可以用 super.name(); 方式来 访问、得到 该父类的被重写方法。
super 是对当前对象里边 父类 对象的引用,this(只存在于方法里) 是对当前调用 该方法(含有this的方法) 的对象的引用。




0 0
原创粉丝点击