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

------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  包访问控制符(默认不写)
子类 public protected  
任何地方     public


>> super关键字

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




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值