zoukankan      html  css  js  c++  java
  • Java基础笔记(十四)——面向对象(续)【构造方法和this关键字】

    一.构造函数的规则

    1.构造方法是用来在对象实例化时初始化对象的成员变量的,以完成对象的初始化工作。

    2.构造方法与类名相同且没有返回值(返回值也不能为void型)。如:public 构造方法名( ) { }

    3.构造方法和new一起操作,在对象实例化时被系统自动调用,且只运行一次,不能被对象直接调用。

    4.当没有自定义构造方法时,系统会自动添加无参的构造方法。

    5.当有自定义构造方法,无论是有参、无参的构造方法,系统都不会再自动添加无参的构造方法。

    6.构造方法不能被继承,因此,它不能被重写,但是能被重载,可以定义多个不同的参数个数或参数类型的构造方法。

    7.当有父类时,子类在实例化对象时,会先执行父类的构造方法,然后执行子类的构造方法。其中,父类的构造方法可以有0个或多个。

    (1)如果父类没有写构造方法,子类可以写super();也可以不写(系统会默认调用super();)。

    (2)如果父类写了一个无参构造方法和多个有参构造方法,子类会默认调用无参构造方法,如果想调用某个有参构造方法,需在第一行写上super(参数);进行显式调用。

    (3)如果父类有有参构造方法,却没有无参构造方法,子类的每一个构造方法都必须在第一行显示地用super(参数);去调用。

    (4)如果父类和子类都没有写构造函数,编译器会为父类和子类分别生成一个默认的无参构造函数。默认构造函数的修饰符只跟当前类的修饰符有关(如一个类被定义为public,那么它的构造方法也是public)。

    二.this关键字

    类的成员属性和方法,是提供了一个模子,设定有哪些东西。用此类实例化一个对象,那么此对象就具备了这些属性和方法。带参构造方法,即把参数值赋值给这个类的成员属性,该对象具有了当前属性值,如果类的成员属性名与带参构造方法的参数名相同,那么由于就近原则,参数值赋值不到成员属性那里。

    public class Constructor {
        String name;
        public Constructor(String name){
            this.name=name;   //如果这里用name=name;就近原则,参数值赋给了局部变量name,但是成员属性name不会被赋值,对象的属性值为null
        }
        public static void main(String[] args){
            Constructor c=new Constructor("小c");
            System.out.println(c.name);
        }
    }
    //结果:小c

    this在类中代表当前对象,可通过this 关键字完成当前对象的成员属性、成员方法和构造方法的调用。如:this.name=name;     this.method();     this();

    this();//表示调用本类中的无参构造方法,可在有参构造方法中被调用,其它情况构造方法间也不能互相调用;构造方法不能在普通方法中被调用,普通方法可以在构造方法中被调用,可以用this.method();也可以method();。

    super(); //调用父类的无参构造函数

    this();和super();均只能放在构造方法第一行。

    例1

    public class Test {
            String name;
            public Test(){
                System.out.println("父类的无参构造方法");
            }
           public Test(String name){
               this.name=name;
               System.out.println(name+"的有参构造");
           }
    }
    
    
    public class ChildTest extends Test {
    
        public static void main(String[] args){
            ChildTest c=new ChildTest();
            System.out.println(c.name);
        }
    
        public ChildTest(){
            super("父类");
            System.out.println("子类无参构造方法");
        }
    }
    
    //运行结果:
    父类的有参构造
    子类无参构造方法
    父类

    子类继承了父类的属性,对象有其属性值。

    例2

    public class Test {
            public Test(){
                System.out.println("construct");
            }
            public void Test(){
                System.out.println("call Test");
            }
            public static void main(String[] args){
                Test t=new Test();  //调用构造函数
                t.Test();   //调用Test方法
            }
    }
    
    //运行结果
    construct
    call Test

    普通方法可以与构造方法同名,但建议不要将类名作为普通方法名。

     this小结:

    Java中,this用来指向当前实例对象,它区分了对象的成员变量与方法的形参,当一个方法的形参与成员变量的名字相同时,就会覆盖成员变量。(就近原则)

    构造方法:

    创建对象时,如Animal one=new Animal();   或者Animal one = new Animal("one",2);

    相应的会选择调用无参构造方法或者有参构造方法,构造方法都是用来初始化对象的,有参构造方法的参数作用可以把对象的实参传给形参,形参值赋值给成员属性,使得当前对象拥有赋值后的属性值。成员属性是这个类共同拥有的,该类实例化对象后,把值赋值给成员属性,当前对象即拥有赋值后的属性值。

  • 相关阅读:
    团队开发之个人博客三
    团队开发之个人博客二
    团队开发之个人博客一
    第六周进度条
    四则运算(Android)版
    第五周学习进度条
    第二冲刺周期个人报告01
    查找水王01
    构建之法阅读笔记09
    构建之法阅读笔记08
  • 原文地址:https://www.cnblogs.com/tendo/p/10485454.html
Copyright © 2011-2022 走看看