java extends 继承的一些小结。

继承中的一些构造函数问题。

this(); 代表本类的构造函数

super(); 代表父类的构造函数。

在子类的构造函数中的第一行默认的包含super();隐式语句

但如果父类中有其他的非空参的构造函数而没有空参的构造函数,在子类的构造函数中第一行如果没有去调用父类的非空参构造函数,则会在编译时报错。因为子类中所有的构造函数默认都会访问父类中的空参构造函数。

例:

class Fu

{

       Fu(){

              System.out.println(“Fu…..run”);

}

}

class Zi extends Fu

{

       Zi(){

              Super();//隐式语句

              System.out.println(“Zi......run”);

}

}

如果父类中不写构造函数的话,即存在一个隐式的空参的构造函数。

子类为什么要访问父类的构造函数?

因为子类在继承了父类的内容(属性)时,在使用之前必须知道父类是如何进行初始化的(如果没有显式的初始化,则,数值类型为0boolean行为falseString null)。所以必须调用父类的构造函数。

this(); super();只能出现在子类构造函数的第一行。故二者只能有其一。

如果子类其中的某一构造函数的第一行使用了this调用了其他的子类构造函数。则在此构造函数中不会访问父类的构造函数。

 

 

 

子父类中的成员变量不存在继承覆盖。

在本类中,成员变量和局部变量同名用this 区分。

在子父类中,成员变量同名用super区分。

this 代表一个本类对象的引用。

Super 代表一个父类空间

子类不能直接访问父类中的私有成员

子父类中的成员函数同名,成为子类函数覆盖父类函数

函数的两个特性

1, 重载:发生在同一个类中。(函数名相同,形参不同)

2, 覆写:发生在子父类中。子父类函数一模一样(返回类型,函数名,形参都相同)

 

覆盖的注意事项:

1, 子类方法的权限必须大于或等于父类函数的权限。

2, 静态只能覆盖静态,或被静态覆盖。

final  最终修饰符

可以修饰类,方法,变量。

1, 当修饰类时,该类表示最终类,不能被其他类所继承。

2, 当修饰方法时,该方法不能被覆盖。

3, 当修饰变量时,该变量不能被修改。

public staticfinal double PI =3.1415; 全局常量

子类成员变量在new过程中值变化过程

首先通过子类构造函数的第一行的隐式supe();语句访问父类构造函数。在此时子类的成员变量都是默认值(数值类的为0,boolean类型的 为false,String类型的为null而不是“”)。

当调用父类构造函数结束后,则显示初始化成员变量。

再接着是按照子类构造函数的方式初始化成员变量。

例:

package ExtendsDemo;

class Fu
{
	int num ;
	Fu(){
		System.out.println("----------------------Fu show  start------------------------");
		show();		
		System.out.println("----------------------Fu show  end----------------------------");
	}
	void show() {
		System.out.println("fu show  run...");
	}
}

class Zi extends Fu
{
	int num = 8;
	String s = "子类显示初始化!";
	boolean b = true;
	Zi(){	
//		super();隐式调用		在调用父类构造函数时还未对子类成员变量进行显式初始化。故此时num = 0
		//等super方法执行完之后才对子类成员变量进行初始化。此时num = 8
		//等显式初始化之后
		show();
		System.out.println("Zi 显示初始化 end.....");
		System.out.println("--------------------最后进行构造函数的初始化----------------------------------------");
		num = 9;
		s = "子类构造方法初始化!";
		b = false;
	}
	void show(){	
		System.out.println("zi show run ..."+num+"----"+s+",,,,,,"+b);
	}
}

public class ExtendsDemo1 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
//		new Zi();
		Zi z = new Zi();
		z.show();
	}
}


 

运行结果:

----------------------Fu show  start------------------------
zi show run ...0----null,,,,,,false
----------------------Fu show  end----------------------------
zi show run ...8----子类显示初始化!,,,,,,true
Zi 显示初始化 end.....
--------------------最后进行构造函数的初始化----------------------------------------
zi show run ...9----子类构造方法初始化!,,,,,,false


 

 

 

 

 

 

 

 

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值