zoukankan      html  css  js  c++  java
  • Java中类的构造方法

    constructor;构造函数。

    在创建对象的时候,对象成员可以由构造函数方法进行初始化。

    new对象时,都是用构造方法进行实例化的;
    例如;Test test = new Test("a");
     //Test("a");其中这个就是构造函数,“a”为构造方法的形参;
    构造方法的方法名必须与类名一样。
    构造方法没有返回类型,也不能定义为void,在方法名前面不声明方法类型。
    构造方法不能作用是完成对象的初始化工作,他能够把定义对象时的参数传递给对象的域。
    构造方法不能由编程人员调用,而要系统调用。
    构造方法可以重载,以参数的个数,类型,或排序顺序区分。

    具体用法,代码实现。

    1;单个构造函数方法;’
    这里写图片描述
    这里写图片描述
    这里写图片描述

    2;多个构造函数方法
    (例子为;带参数与不带参数)
    这里写图片描述

    这里写图片描述

    3;关于继承类的构造方法的调用;
    先看事例;
    这里写图片描述
    这里写图片描述
    这里写图片描述
    这里写图片描述
    这里写图片描述
    我第一次看到结果的时候好惊讶的,怎么都调用了哈。看了知识点才知道。
    在Subtine的主方法中只调用子类构造方法,实例化子类对象并且在子类构造方法中,没有调用父类的构造方法的任何语句。但是在实例化对象时,它相应的调用了父类构造方法,在结果中还可以看到调用构造方法的顺序,首先是顶级,再继续往下直达本身类。也就是说实例化子类的时候,要首先实例化父类对象,然后在实例化子类对象,所以在子类构造方法调用父类构造方法前,父类已经实例化了。
    拓展一下。

    package text_4_1;
    
    public class Parent {
        Parent(int a){//就是将无参数构造方法改成有参数的。
            System.out.println("调用父类Parent构造方法" + a);
        }
    }
    
    package text_4_1;
    
    public class Subparent extends Parent{
        Subparent(){
            System.out.println("调用子类Subparent的构造方法");
        }
    }
    
    package text_4_1;
    
    public class Subtine extends Subparent{
        Subtine(){
            System.out.println("调用子类Subtine构造方法");
        }
    }
    
    
    package text_4_1;
    
    public class Main {
        public static void main(String[] args){
            Subtine subtine = new Subtine();
        }
    }
    

      

    这样的代码将会报错;//就是将父类Parent类无参数构造方法改成有参数的。

    Implicit super constructor Parent() is undefined. Must explicitly invoke another constructor
    //隐式的超级构造函数()是未定义的。必须显式地调用另一个构造函数 

    意思就是在子类调用构造函数时,必须先调用父类构造函数,因为无参数的构造函数,编译器会自动调用,也就是第一种情况不会报错。但是有参数的,就必须要利用Super的方法来调用。如果不进行调用那么将会报错。

    将Subparent类改成。
    package text_4_1;
    
    public class Subparent extends Parent{
        Subparent(){
            super(5);//调用了其父类就不会报错了。
            System.out.println("调用子类Subparent的构造方法");
        }
    }
    //备注一下,调用父类构造方法就是;super();//就ok了。
    

    还补充一点,关于构造方法的可扩展性;
    查看过源码的应该都发现过jdk的编码人员会在一个类中建立多个构造方法;然而他的作用就是提高可扩展性;
    这里写图片描述
    这么多构造方法,他们之间并且还有联系;通过this()来调用自己类的其他构造方法,来减少代码的复制,增大程序的可读性;
    这里写图片描述
    至于怎么来进行封装;举个例子;
    这里写图片描述
    这里写图片描述
    构造方法的可扩展性就表示在这里;
    可以多多个构造方法;根据不同的参数决定调用哪个;带来很大的可扩展性
    刚试了一下notepad++;然而直接爆出中文乱码,搞了好久才搞清楚;
    这里写图片描述

    原因是;国标码和ANSI之间的不兼容;
    这里写图片描述

    因为刚学,有什么不足的后期补上。
    望路过的大神,指点一二。

  • 相关阅读:
    leetcode 29-> Divide Two Integers without using multiplication, division and mod operator
    ros topic 发布一次可能会接收不到数据
    python中的print()、str()和repr()的区别
    python 部分函数
    uiautomatorviewer错误 unable toconnect to adb
    pyqt 不规则形状窗口显示
    appium 计算器demo
    Spring 3.0 注解注入详解
    Spring Autowire自动装配
    restful 学习地址
  • 原文地址:https://www.cnblogs.com/sunyubin/p/9750966.html
Copyright © 2011-2022 走看看