精华内容
下载资源
问答
  • 今天看代码的时候发现自己对于继承中方法的执行顺序不太清楚,查了下资料,然后又写了个测试类。代码如下,其中包含了重写,子类重写父类的方法时,会覆盖父类中的方法,父类中的该方法不会被执行。public class ...

    今天看代码的时候发现自己对于继承中方法的执行顺序不太清楚,查了下资料,然后又写了个测试类。代码如下,其中包含了重写,子类重写父类的方法时,会覆盖父类中的方法,父类中的该方法不会被执行。

    public class Methods {
    	static {
    		System.out.println("父类的static块");
    	}
    	{
    		System.out.println("父类的代码块");
    	}
    	Methods(){
    		System.out.println("父类的构造方法");
    	}
    	void test() {
    		System.out.println("父类的普通方法");
    	}
    	public static void main(String[] args) {
    		SubClass sc = new SubClass();
    		sc.test();
    	}
    }
    class SubClass extends Methods{
    	static {
    		System.out.println("子类的static块");
    	}
    	SubClass(){
    		System.out.println("子类的构造方法");
    	}
    	{
    		System.out.println("子类的代码块");
    	}
    	void test() {
    		System.out.println("子类的普通方法");
    	}
    }
    
    

    执行结果为:
    父类的static块
    子类的static块
    父类的代码块
    父类的构造方法
    子类的代码块
    子类的构造方法
    子类的普通方法

    展开全文
  • /**继承中构造方法的执行顺序:*在有子父类的继承关系中,创建子类对象,调用子类的构造方法,* 如果子类构造方法的第一行,如果没有调用父类方法,则系统默认调用父类的无参构造。** 在代码执行的时候,肯定会先...

    1.首先先写一个类

    package extendsDemo;

    /*

    *继承中构造方法的执行顺序:

    *在有子父类的继承关系中,创建子类对象,调用子类的构造方法,

    * 如果子类构造方法的第一行,如果没有调用父类方法,则系统默认调用父类的无参构造。

    *

    * 在代码执行的时候,肯定会先执行父类的构造,因为要先给父类的成员变量初始化,以防子类用到。

    */

    public class ExtendsTest {

    public static void main(String[] args) {

    Zi z = new Zi();

    }

    }

    class Die{

    public Die(){

    System.out.println("我是父类的无参构造");

    }

    public  Die(int num){

    System.out.println("我是父类的有参构造");

    }

    }

    class  Zi extends Die{

    public Zi(){  //即这个的第一行,如果没有调用父类方法,则系统默认调用父类的无参方法

    //super();

    this(1);

    System.out.println("我是子类的无参构造");

    }

    public Zi(int num){

    System.out.println("我是子类的有参构造");

    }

    }

    结果是:

    2f0ae3fa4257

    第一行调用父类构造:

    2f0ae3fa4257

    运行结果

    2f0ae3fa4257

    继承的优缺点:

    优点:提高了代码的复用性

    提高了代码的维护性

    缺点:类的耦合性增强了,当遇到关系比较紧密的几个类的时候可能会更容易出错

    开发的原则:高内聚低耦合

    展开全文
  • Java继承中,构造器并不能被继承,而是被显示或隐式调用。 1、子类构造方法中必须调用其基类构造方法(显示或隐式) 1.1、若是显示调用,则可以通过 super(argument_list)来调用,且super调用必须在首行以...

    在Java中,如果一个类没有任何显式创建的构造器则该类默认会有一个无参构造器;如果显式创建了有参构造器则该类就不再有默认无参构造器。

    在Java继承中,构造器并不能被继承,而是被显示或隐式调用。

    1、子类的构造方法中必须调用其基类的构造方法(显示或隐式)

    1.1、若是显示调用,则可以通过 super(argument_list) 来调用,且super调用必须在首行以保证子类对象从所有直接或间接父类中继承的实例变量都被正确地初始化(this关键字可以调用本类中的其他构造器,也必须在首句,因此this和super没法同时用)。

    1.2、若在子类构造方法中没有显示调用,则系统默认会进行隐式调用——调用基类的无参数构造方法。因此若此时基类中没有无参数构造器则会编译出错。

     

    示例1:子类中未显示调用父类构造器,则都默认调用父类无参构造器。

     1 class FatherClass {
     2 
     3     public FatherClass() {
     4         System.out.println(1);
     5     }
     6 
     7     public FatherClass(int age) {
     8         System.out.println(age);
     9     }
    10 
    11 }
    12 
    13 public class SonClass extends FatherClass {
    14 
    15     public SonClass() {
    16     }
    17 
    18     public SonClass(int c) {
    19         System.out.println(2);
    20     }
    21 
    22     public SonClass(int a, int b) {
    23         super(a);
    24         System.out.println(b);
    25     }
    26 
    27     public static void main(String[] args) {
    28         new SonClass();
    29         new SonClass(10);
    30         new SonClass(10, 11);
    31     }
    32 }

    示例2:子类未显示调用父类构造器而父类没有无参构造器,编译出错。

     1 class AA {
     2     public AA(int a) {
     3         ;
     4     }
     5 }
     6 
     7 class BB extends AA {
     8     public BB() {// 此构造器会由于没有显示调用父类构造器,因此会隐式调用父类的无参构造器。但父类没有无参构造器,因此编译报错:Implicit super constructor AA() is undefined. Must explicitly invoke another constructor
     9         System.out.println("test");
    10     }
    11 
    12     public BB(int a) {
    13         super(a);
    14     }
    15 }

     

    转载于:https://www.cnblogs.com/z-sm/p/7604227.html

    展开全文
  • demo class A{ static { System.out.println("父类静态代码块"); } public A(){ ...父类构造方法"); } { System.out.println("父类初始化块"); } } public class B ...

    demo

    class A{
        static {
            System.out.println("父类静态代码块");
        }
        public A(){
            System.out.println("父类构造方法");
        }
        {
            System.out.println("父类初始化块");
        }
    }
    public class B extends A{
        static{
            System.out.println("子类静态代码块");
        }
        public B(){
            System.out.println("子类构造方法");
        }
        {
            System.out.println("子类初始化块");
        }
        public static void main(String[] args){
            new B();
        }
    }
    

    运行结果:

    这里写图片描述

    展开全文
  • 1.单独的父类测试Java中,new一个类的对象,类里面的静态代码块、非静态代码、无参构造方法、有参构造方法、类的一般方法等部分,它们的执行顺序相对来说比较简单,用程序也很容易验证。比如新建一个测试父类。...
  • class X {   Y b = new Y();   X() {  System.out.print("X");... 注意:其中子类无参方法中的super 没有执行,因为子类创建对象时,  已经执行过一次父类无参构造方法,所以不再执行
  • java程序, 在子类继承父类时, 执行顺序是怎样呢? 代码实现: /** * super 子类通过super调用父类成员,也可以super()调用父类构造方法 但是也是必须放在第一句 * */ public class TestExtends2 { ...
  • Java中继承的执行顺序

    2017-01-15 14:59:48
    若类C继承类B,类B继承类A,则类C既有从类B那里继承下来属性与方法,也有从类A那里继承下来属性与方法,还可以有自己新定义属性和方法继承属性和方法尽管是隐式,但仍是类C属性和方法继承是在一些...
  • java继承中父类和子类静态、非静态代码块,构造函数,静态方法的执行顺序
  • 1.单独的父类测试 Java中,new一个类的对象...它们的执行顺序相对来说比较简单,用程序也很容易验证。 比如新建一个测试父类。 public class FatherTest { private String name; FatherTest(){ System....
  • Java中,new一个类的对象,类里面的静态代码块、非静态代码、无参构造方法、有参构造方法、类的一般方法等部分,它们的执行顺序相对来说比较简单,用程序也很容易验证。比如新建一个测试父类。publicclassFatherTest...
  • Java中,new一个类的对象,类里面的静态代码块、非静态代码、无参构造方法、有参构造方法、类的一般方法等部分,它们的执行顺序相对来说比较简单,用程序也很容易验证。比如新建一个测试父类。public class ...
  • 我先把自己测试结论总结写出来,以后忘记再来看看如果b类继承自a类,在main方法中new出b对象(不带参数),那么他执行的顺序是:父类a静态方法-->类b静态方法-->父类a非静态方法(不指定方法名)-->...
  • java中继承后,子类和父类的静态代码块、构造代码块与构造方法的执行顺序分析 首先是未实现继承前的执行顺序 程序如下: 执行结果如下: 未实现继承前代码的执行顺序很好理解… 实现继承后代码的执行顺序又是怎么...
  • Java中,new一个类的对象,类里面的静态代码块、非静态代码、无参构造方法、有参构造方法、类的一般方法等部分,它们的执行顺序相对来说比较简单,用程序也很容易验证。比如新建一个测试父类。public class ...
  • 执行初始化对象属性,再执行构造方法中的初始化当使用继承这个特性时,程序是如何执行的呢,也就是说我们需要关注继承的初始化顺序,当我们创造一个对象时候,所执行的构造方法就相当于初始化一个对象,所以...
  • Java中,子类实例化时会调用父类构造方法,子类父类方法会有一个函数生成表,执行时实现动态链接,子类重写父类方法时执行顺序也是这样 对于执行父类构造方法的问题。可以归纳为两种情况 1,如果父类有无...
  • java - @BeforeClass和继承 - 执行顺序我有一个抽象基类,我用它作为单元测试基础(TestNG 5.10)。 在这个类,我为我测试初始化整个环境,设置数据库映射等。这个抽象类有一个带有@BeforeClass注释的方法来进行...
  • 我们经常在项目使用继承,但是往往不太明白,程序运行的顺序以及原理,尤其是使用上转型对象时候,以及父类子类中都有static变量和方法时,不知道先运行谁。我也是写了一个例子。总结了一下。父类:public class...
  • java继承中初始化的顺序

    千次阅读 2015-11-28 21:18:21
    java中子类继承了父类,其初始化的顺序是: 首先去看父类里面有没有静态代码块,如果有,它先去执行父类里面静态代码块里面内容;当父类静态代码块里面内容执行完毕后,接着去执行子类里面静态代码块,当...
  • Java学习之继承中的执行顺序详解

    千次阅读 2015-01-04 11:24:02
    代码块(理解) (1)用{}括起来的代码。 (2)分类: A:局部代码块 用于限定变量的生命周期,及早释放,提高内存利用率。 B:构造代码块 把多个构造方法相同的代码可以放到...(3)静态代码块,构造代码块,构造方法的顺序问题?
  • Java中继承,子类和父类的静态代码块、普通代码块、构造方法的执行顺序Java中继承,子类和父类的静态代码块、普通代码块、构造方法的执行顺序父类代码子类代码测试结果结论(个人结论仅供参考) Java中继承,子类和...
  • 层次初始化层次初始化:类初始化时分层进行,在继承中,先进行父类对象初始化过程,等父类对象初始化过程结束后,再进行子类对象初始化过程。解释:在子类构造方法中,无论是显式或隐式调用super(),...
  • 静态属性实在加载class文件时候就已经初始化好了,...父类【普通成员变量被普通成员方法赋值】和【普通代码块】,按在代码出现的顺序依次执行执行父类构造方法。 子类【普通成员变量被普通成员方法赋...
  • (一)Java静态代码块 静态方法区别 一般情况下,如果有些代码必须在项目启动时候就执行的时候,需要使用静态代码块,这种代码是主动执行的;需要在项目启动时候就初始化,在不创建对象情况下,其他程序来调用时候...
  • Java继承中,父类子类构造方法、静态方法、非静态方法的执行顺序: 先看代码: 父类A,子类B,都包含构造方法、静态方法、非静态方法三个方法: public class A { //父类构造器 public A(){ System.out....
  • 验证子类继承父类中的static模块、构造方法执行顺序 验证java多态性
  • 本文讲述有关一个类的静态代码块,构造代码块,构造方法的执行流程问题。首先来看一个例子 /** * Created by lili on 15/10/19. */ class Person{ static { System.out.println("执行Person静态代码块")...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 909
精华内容 363
关键字:

java继承中方法的执行顺序

java 订阅