java 继承父类 是会先执行父类吗

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 继承父类 是会先执行父类吗相关的知识,希望对你有一定的参考价值。

java中子类继承父类程序执行顺序问题
Java中,new一个类的对象,类里面的静态代码块、非静态代码、无参构造方法、有参构造方法、类的一般方法等部分,它们的执行顺序相对来说比较简单,用程序也很容易验证。比如新建一个测试父类。
public class FatherTest

private String name;

FatherTest()
System.out.println("--父类的无参构造函数--");


FatherTest(String name)
this.name=name;
System.out.println("--父类的有参构造函数--"+this.name);


static
System.out.println("--父类的静态代码块--");



System.out.println("--父类的非静态代码块--");


public void speak()
System.out.println("--父类的方法--");



加入一个main程序后
public static void main(String[] args)
System.out.println("--父类主程序--");

FatherTest father=new FatherTest("父亲的名字");
father.speak();


执行结果为:
--父类的静态代码块--
--父类主程序--
--父类的非静态代码块--
--父类的有参构造函数--父亲的名字
--父类的方法—

可以很明显的看出来执行顺序:静态代码块—主程序—非静态代码块—构造函数—一般方法。
如果加入子类的继承以后,情况就会变得复杂些。比如我们再新建一个测试子类。
public class SonTest extends FatherTest
private String name;

static
System.out.println("--子类的静态代码块--");



System.out.println("--子类的非静态代码块--");


SonTest()
System.out.println("--子类的无参构造函数--");


SonTest(String name)
this.name=name;
System.out.println("--子类的有参构造函数--"+this.name);


@Override
public void speak()
System.out.println("--子类Override了父类的方法--");



然后再加入一个main函数
public static void main(String[] args)
System.out.println("--子类主程序--");

FatherTest father=new FatherTest("父亲的名字");
father.speak();

SonTest son=new SonTest("儿子的名字");
son.speak();

执行结果为:
--父类的静态代码块--
--子类的静态代码块--
--子类主程序--
--父类的非静态代码块--
--父类的有参构造函数--父亲的名字
--父类的方法--
--父类的非静态代码块--
--父类的无参构造函数--
--子类的非静态代码块--
--子类的有参构造函数--儿子的名字
--子类Override了父类的方法--
加入了子类以后,执行顺序有了新的变化,我们可以总结一下。首先第一部分执行的是父类的静态代码块—子类的静态代码块—主程序。这一部分都是执行一次,与建立多少对象没有关系。第二部分new了一个父类对象,并调用了方法。执行了它的非静态代码块—构造函数—一般方法。第三部分new了一个子类的对象,并调用了方法。执行顺序为父类的非静态代码块—父类的无参构造函数,然后是子类的非静态代码块—子类构造函数—子类的方法。
参考技术A 你要写一个调用才会执行父类(具体看你哪个写前面了),而且如果一样的函数更改了子类会覆盖父类执行 参考技术B 构造函数是一定先调用父类的。
其他函数,你调用哪个就是哪个。

java中子类继承了父类就可以使用父类的方法了,那为啥还要用super?

super,超类,即父类。当你实例化一个子类的时候,编译器会自动查找子类的父类,并先将父类初始化。
当你的子类使用带参数的构造函数时,你必须保证该子类的父类也有相同的带参数的构造器。
1.super(),它用来告诉编译器,爷我用的是哪个型号的构造器,方便你找俺老子。
2.super.属性,用于访问父类属性或方法。
比如,
public
class
Father()
public
Father()
public
Father(String
name,String
sex)
this.name=name;
this.sex=sex;

public
String
name="免贵姓唐";
public
String
sex;

public
class
Son_1()
public
Son_1()super();//此处表示为无参构造函数,一般可省略
public
Son_1(String
name,String
sex)
super(name,sex);

public
String
name="真的免贵";
public
static
void
main(String[]
arg)
print(super.name+"
"+name);

参考技术A 你可以不用super,
用这个的原因是你的子类方法想覆盖父类方法,但是又想需要父类方法的功能,所以先super
调用父类方法后加上自己的一些实现

以上是关于java 继承父类 是会先执行父类吗的主要内容,如果未能解决你的问题,请参考以下文章

java中一个子类是不是可以继承父类的构造方法

php子类的构造函数能继承父类的吗?

继承 extends

JAVA中子类能修改父类吗?

java子类从父类继承某个属性,怎么添加特定的注解不影响父类

在java中子类若要继承父类,需要使用的关键字是啥