final class Test{ //使用final定义的类不能被继承
public final static int NUM = 10;//使用final定义的属性不能被改变。
public final static void fun(){ //使用final定义的方法不能被覆写。
System.out.println("测试");
}
}
class Fu{
int num=10;
Fu(){
super();
show();
return;
}
void show(){
System.out.println("Fu "+num);
}
}
class Zi extends Fu{
int num=1;
Zi(){
super();
System.out.println("Zi show");
return;
}
void show(){
System.out.println("Zi "+num);
}
}
public class TextDemo1{
public static void main(String[] args){
Zi z = new Zi();
/*
结果:
Zi 0
Zi show
*/
}
}
/**
通过super初始化子类内容的时候,子类成员变量并未显示初始化。
等super()父类初始化完成后才进行子类的成员变量显示初始化。
一个对象实例化过程:
Demo m = new Demo();
1,JVM会读取指定的路径下的Demo.class文件,并加载进内存,
并会加载Demo的父类(如果没有直接父类的情况下)。
2,在堆内存中开辟空间,分配地址。
3,并在对象空间中,对对象中的属性进行默认初始化。
4,调用对应构造函数进行初始化。
5,在构造函数中,第一行会先调用父类中的构造函数进行初始化。
6,父类初始化完成后,在对子类的属性进行显示初始化。
7,在进行子类构造函数的特定初始化。
8,初始化完成后,将地址值赋值给引用变量。
通过super初始化子类内容的时候,子类成员变量并未显示初始化。
等super()父类初始化完成后才进行子类的成员变量显示初始化。
一个对象实例化过程:
Demo m = new Demo();
1,JVM会读取指定的路径下的Demo.class文件,并加载进内存,
并会加载Demo的父类(如果没有直接父类的情况下)。
2,在堆内存中开辟空间,分配地址。
3,并在对象空间中,对对象中的属性进行默认初始化。
4,调用对应构造函数进行初始化。
5,在构造函数中,第一行会先调用父类中的构造函数进行初始化。
6,父类初始化完成后,在对子类的属性进行显示初始化。
7,在进行子类构造函数的特定初始化。
8,初始化完成后,将地址值赋值给引用变量。
final关键字
final可以修饰类、方法、变量。
final修饰的类不可以被继承。
final修饰的方法不可以被覆盖。
final修饰的变量是一个常量,只能赋值一次。
内部类只能访问被被final修饰的局部变量。
//继承弊端:打破了封装性。
为什么要用final修饰变量?
其实在程序中如果一个数据是固定的,那么直接使用这个数据就可以了,但是阅读性差,
所以给该数据起个名称,而且这个变量名称的值不能变化,所以加上final固定。
写法规范: 常量的所有字母都大写,多个单词中间用下划线(_)链接。
*/
Java中super、final关键字
最新推荐文章于 2021-12-03 16:31:16 发布