zoukankan      html  css  js  c++  java
  • 子父类中的构造函数

    子父类构造函数


    *在对子类的构造函数进行初始化时,对父类的构造函数也会运行
    那是因为子类构造函数第一行有一条隐式的语句super();
     super():会访问父类中的空参数的构造函数,且子类中的所有构造函数默认第一行都是super();

    public class ExtendsDemo {
    
        public static void main(String[] args) {
            Zi zi=new Zi();
    
        }
    
    }
    
    class Fu{
        Fu(){
            System.out.println("show fu");
        }
    }
    
    class Zi extends Fu{
        Zi(){
            //super()  隐式语句
            System.out.println("show zi");
        }
    }

    输出结果:

    show fu
    show zi

     先运行super(),运行父类的空参数构造函数,再运行子类自己的方法。

    默认时,父类的有参构造函数不能直接被子类继承,因为super()只能直继承父类中无参的构造函数,

    继承有参构造函数,则super就不能隐式了,要用super直接调用用父类的有参构造函数

    调用父类的一般方法用super.父类方法名,调用父类构造用super(父类方法名);

    同时,super语句和this语句一样,放在子类构造函数的第一行;

    子类一实例化,就会去找父类

    如下:

    public class ExtendsDemo {
    
        public static void main(String[] args) {
            Zi z = new Zi();
            Zi z1 = new Zi(3);
    
        }
    
    }
    
    class Fu {
        Fu(int x) {
            System.out.println("show fu" + x);
        }
    }
    
    class Zi extends Fu {
        Zi() {
            // super() 隐式语句
            super(3); // 调用父类对应的构造函数
            System.out.println("show zi");
        }
    
        Zi(int x) {
            // super()
            super(5); // 调用父类对应的构造函数
            System.out.println("zi..." + x);
    
        }
    }

    输出:

    show fu3
    show zi
    show fu5
    zi...3

    public class ExtendsDemo1 {
    
        public static void main(String[] args) {
            Student student = new Student("nike");
            student.show();
        }
    
    }
    
    class Person {
        String name;
    
        Person(String name) {
            this.name = name;
        }
    
        void show() {
            System.out.println(name +"......"+ "go");
        }
    }
    
    class Student extends Person {
        Student(String name) {
            super(name);    //调用父类的变量
        }
    
        void show() {
            super.show();    //调用父类的方法
        }
    }

    输出:

    nike......go

    子类的构造函数第一行,也可以用this设备名手动指定访问本类中的构造函数。子类中会有一个构造函数,会访问父类中的构造函数。

    public class ExtendsDemo {
    
        public static void main(String[] args) {
            Zi z = new Zi(7);
        }
    
    }
    
    class Fu {
    
        Fu(int x) { // 父类初始化后,m初始值变成了11
            System.out.println(x);
        }
    }
    
    class Zi extends Fu {
        Zi() {
            //super(); //隐式语句
            super(5); // 调用父类对应的构造函数
            System.out.println("show zi");
        }
    
        Zi(int x) {
            this();//调用Zi(),同时不再有super(),因为super()只能在第一行
            System.out.println("zi..." + x);
    
        }
    }

    输入出:

    5
    show zi
    zi...7

  • 相关阅读:
    Delphi SQL语句字符串拼接
    DELPHI的MEMO组件
    学习 SQL 语句
    Windows7系统目录迁移:Users,Progr…
    Delphi中Sender对象的知识
    Delphi处理事件函数中的Sender: TObject代表什么?
    (sender as TButton).some 和 TButton(sender).some 的区别是什么?
    什么情况下需要检测预装Win8/8.1电脑内置激活密钥(即Win8/8.1 OEM key)?
    用SQL语句查找包含有某个关键字的存储过程、触发器、函数等等
    DELPHI 解决DBGrid SHIFT键多选问题
  • 原文地址:https://www.cnblogs.com/ibelieve618/p/6434347.html
Copyright © 2011-2022 走看看