JAVA基础11----继承,重写,final

1.静态代码块,构造代码块,构造方法,执行的先后顺序问题
/*执行过程:
1.jvm调用了main方法,main进栈
2.遇到Zi z =new Zi();会先将Fu.class和Zi.class分别加载进方法区,再创建对象,当Fu.class加载进内存
父类的静态代码块会随着fu.class一起加载,当zi.class加载进内存,子类的静态代码块会随着Zi.class一起加载
第一个输出,静态代码块Fu,第二个输出静态代码块zi
3.走zi类的构造方法,因为java中是分层初始化的,先初始化父类,再初始化子类,所以先走的父类的构造,但是在执行父类构造时
,发现父类有构造代码块,构造代码块是优先于构造方法执行的,所以第三个输出构造代码块fu,第四个输出构造方法fu
4.fu类初始化结束,子类初始化开始,第五个输出的是zi类的构造代码块,构造方法zi
*/

class Demo2_Extends {
	public static void main(String[] args) {
		Zi z = new Zi();
	}
}

class Fu {
	static {
		System.out.println("静态代码块fu");
	}

	{
		System.out.println("构造代码块fu");
	}

	public Fu () {
		System.out.println("构造方法fu");
	}
}

class Zi extends Fu {
	static {
		System.out.println("静态代码块Zi");
	}

	{
		System.out.println("构造代码块Zi");
	}

	public Zi () {
		System.out.println("构造方法zi");
	}
}

2./*执行过程:
继承中成员方法的关系
方法重写:
A.子父类出现了一模一样的方法(返回值类型可以是子父类)
B.方法重写的应用:当子类需要父类的功能,而功能主体子类有自己特有的内容的时候
可以重写父类中的方法,这样,即沿袭了父类的功能,又定义了子类特有的内容

方法重写注意事项:
A.父类中的私有的方法不能被重写
因为父类私有的方法子类根本无法继承
B.子类重写父类方法时,访问权限不能更低
最好一致
C.父类静态方法,子类也必须通过静态方法进行重写

子类重写父类方法的时候,最好声明一摸一样
*/

class Demo2_Extends {
	public static void main(String[] args) {
		Zi z = new Zi();
		z.print();//就近原则
		z.method();
	}
}

class Fu {
	

	public void print () {
		System.out.println("fu print");
	}
}

class Zi extends Fu {
	public void method () {
		System.out.println("zi method");
	}
	public void print () {                //重写
		super.print();
		System.out.println("zi print");
	}
}

3./*final关键字
修饰类,类不能被继承
修饰变量,变量就成了常量,只能赋值一次
修饰方法,方法不能被重写
*/

class Demo1_Final {
	public static void main(String[] args) {
		Son s = new Son();
	}
}

class Fu {
	public final void print () {
		System.out.println("父类");
	}
}

class Son extends Fu{
	public  void print () {
		System.out.println("子类");
	}
}

/*final关键字
基本类型,是值不能改变
引用类型,是地址值不能被改变,对象中的属性可以改变
*/

class Demo1_Final {
	public static void main(String[] args) {
		final int NUM  = 10;
		//NUM = 20; //无法为最终变量赋值
		final Person p = new Person("张三",23);
		//p = new Person();
		p.setAge(24); 
	}
}

class Person {
	private String name;
	private int age;

	public Person () {  }

	public Person(String name,int age) {
		this.name = name;
		this.age = age;
	}

	public void setName(String Name) {
		this.name = name;
	}

	public String getName () {
		return name;
	} 
	
	public void setAge(int age) {
		this.age = age;
	}

	public int getAge () {
		return age;
	} 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值