java中父类和子类的关系

子类继承父类,子类中就拥有父类的所有属性和方法。在创建子类的实例的时候,父类和子类到底是如何执行的呢?还有静态代码块和非静态代码块和构造方法的执行顺序?

1.先执行父类的静态代码块,然后再子类静态代码块
2.父类的非静态代码块,构造方法
3.子类的非静态代码块,构造方法
对象的初始化顺序
静态代码块内容先执行,接着执行父类非静态代码块和构造方法,然后执行子类非静态代码块和构造方法。


注意:子类的构造方法,不管这个构造方法带不带参数,默认的它都会先去寻找父类的不带参数的构造方法。

如果父类没有不带参数的构造方法, 那么子类必须用supper关键子调用父类带参数的构造方法,否则编译不能通过。

当一个类中有多个static{}的时候,按照static{}的定义顺序,从前往后执行;

看代码:

package com.zhb.basic;
/**
 *子类和父类的关系
 * @author Administrator
 *
 */
public class Test1 extends superTest1{
	public Test1(){
		super("xxx");//父类没有无参构造方法,有有参的构造方法,就要显式调用super(参数)
		System.out.println("xxxx子类构造方法");
	}
	public Test1(String name){
		super("xxx");//同上
		System.out.println("子类类有参构造函数");
	}
	{
		System.out.println("我是子类非静态代码块");
	}
	{
		System.out.println("我是子类非静态代码块2");
	}
	static{
		//当一个类中有多个static{}的时候,按照static{}的定义顺序,从前往后执行;
		System.out.println("我是子类静态代码块");
	}
	
	public static void main(String[] args){
		/*Test1 t = new Test1();
		char a = 'a' - 32;
		char b = Character.toUpperCase('c');
		System.out.println(b);
		System.out.println(t.testUpperCase("AVVV"));
		long x = 222_5555;
		System.out.println(x);*/
		
		//子类和父类的关系
		Test1 t1 = new Test1("xxx");	
	    
	}

}


class superTest1{
	/*public superTest1(){
		System.out.println("suerTest1无参构造方法");
	}*/
	public superTest1(String name){
		System.out.println("父类有参构造函数");
	}
	{
		System.out.println("我是父类类非静态代码块");
	}
	
	static{
		System.out.println("我是父类静态代码块");
	}
	
	public final void cry(){
		System.out.println("haha");
	}
}
 


输出:
我是父类静态代码块
我是子类静态代码块
我是父类类非静态代码块
suerTest1构造方法
我是子类非静态代码块
xxxx子类构造方法





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值