super和this之间的区别:
this:当前对象(new的对象|调用成员方法的对象)
1.调用本类中的其他构造器
this(参数列表)
2.区分局部和成员之间的问题
super:指代父类对象
1.调用父类的构造器
super()
如果没有显示定义,调用父类的哪一个构造器,默认首行调用super()父类空构造
因为一般子类构造器的首行会默认调用父类空构造的问题,所以建议模板类都至少存在一个空构造
super()必须在首行调用使用才行
2.区分子父类同名问题
如果当子父类中存在同名成员的时候,子类中使用同名内容默认就近原则指代父类,如果先要使用父类的通过super使用
super指代父类对象
如果不存在同名问题,调用父类中的成员,super.可以省略
先父类后子类
先静态后成员
final 关键字
被final修饰的变量为常量
被final修饰的方法不能被重写
被final修饰的类不能被继承 (太监类)
public class SuperDemo01 {
//成员变量 引用数据类型 存储对象类型的数据
static final Zi z=new Zi();
public static void main(String[] args) {
Zi zi=new Zi();
System.out.println(zi.a);
zi.test();
System.out.println(zi);
//z=new Zi(); 对象的内存地址不可以改变,但是其成员的值可以修改
z.s="hehe";
System.out.println(z.s);
}
}
class Fu{
int a=5;
int b=10;
/*public Fu() {
System.out.println("我是父类空构造");
}*/
public Fu(int a) {
System.out.println("我是父类带参构造");
this.a=a;
}
}
class Zi extends Fu{
int a=1;
String s="哈哈";
public Zi() {
//super();
this("1");
System.out.println("我是子类空构造");
}
public Zi(String s){
super(500);
}
//测试字父类同名问题
void test(){
System.out.println(a); //默认就近原则
System.out.println(new Fu(1).a);
System.out.println(super.a);
System.out.println(this);
}
}