2013年8月24日、继承|final关键字|



/*
子父类中的构造函数的特点。


在子类构造对象时,发现,访问子类构造函数时,父类也运行了。
为什么呢?
原因是:在子类的构造函数中第一行有一个默认的隐式语句。 super();


子类的实例化过程:子类中所有的构造函数默认都会访问父类中的空参数的构造函数。


为什么子类实例化的时候要访问父类中的构造函数呢?
那是因为子类继承了父类,获取到了父类中内容(属性),所以在使用父类内容之前,
要先看父类是如何对自己的内容进行初始化的。


所以子类在构造对象时,必须访问父类中的构造函数。 
为什么完成这个必须的动作,就在子类的构造函数中加入了super()语句。


如果父类中没有定义空参数构造函数,那么子类的构造函数必须用super明确要调用
父类中哪个构造函数。同时子类构造函数中如果使用this调用了本类构造函数时,
那么super就没有了,因为super和this都只能定义第一行。所以只能有一个。
但是可以保证的是,子类中肯定会有其他的构造函数访问父类的构造函数。




注意:supre语句必须要定义在子类构造函数的第一行。因为父类的初始化动作要先完成。










*/


class Fu
{
int num ;
Fu()
{
num =10;
System.out.println("A fu run");
}
Fu(int x)
{
System.out.println("B fu run..."+x);
}
}
class Zi extends Fu
{
int num;
Zi()
{
//super();//调用的就是父类中的空参数的构造函数。

System.out.println("C zi run"+num);
}
Zi(int x)
{
this();
//super();
// super(x);
System.out.println("D zi run "+x);
}
}


class  ExtendsDemo1
{
public static void main(String[] args) 
{
new Zi(6);
}
}
class Demo//extends Object
{
/*

Demo()
{
super();
return;
}
*/

}

--------------------------------------------------------------------------------------------

class Fu
{
Fu()
{
super();
show();
return;
}


void show()
{
System.out.println("fu show");
}
}
class Zi extends Fu
{
int num = 8;
Zi()
{
super();
//-->通过super初始化父类内容时,子类的成员变量并未显示初始化。等super()父类初始化完毕后,
//才进行子类的成员变量显示初始化。


System.out.println("zi cons run...."+num);
return;
}
void show()
{
System.out.println("zi show..."+num);
}
}
class ExtendsDemo2
{
public static void main(String[] args) 
{
Zi z = new Zi();
z.show();
}
}


/*
一个对象实例化过程:
Person p = new Person();
1,JVM会读取指定的路径下的Person.class文件,并加载进内存,
并会先加载Person的父类(如果有直接的父类的情况下).
2,在堆内存中的开辟空间,分配地址。
3,并在对象空间中,对对象中的属性进行默认初始化。
4,调用对应的构造函数进行初始化。
5,在构造函数中,第一行会先到调用父类中构造函数进行初始化。
6,父类初始化完毕后,在对子类的属性进行显示初始化。
7,在进行子类构造函数的特定初始化。
8,初始化完毕后,将地址值赋值给引用变量.








*/

————————————————————————————————————————

final关键字:-------------------------------面试题、

//继承弊端:打破了封装性。
/*
final关键字:
1,final是一个修饰符,可以修饰类,方法,变量。!!!
2,final修饰的类不可以被继承。!!!
3,final修饰的方法不可以被覆盖。!!!
4,final修饰的变量是一个常量,只能赋值一次。!!!
为什么要用final修饰变量。其实在程序如果一个数据是固定的,
那么直接使用这个数据就可以了,但是这样阅读性差,所以它该数据起个名称。
而且这个变量名称的值不能变化,所以加上final固定。


写法规范:常量所有字母都大写,多个单词,中间用_连接。






*/
class Fu
{
void method()
{
//调用了底层系统的资源。
}
}
class Zi extends Fu
{
public static final double MY_PI = 3.14;
static final int x = 7;


void method()
{
// final int x = 9;
// x = 9;
final int NUMBER = 9;

System.out.println(MY_PI);
}
}


class FinalDemo 
{
public static void main(String[] args) 
{
System.out.println("Hello World!");
}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章