首页 > 其他分享 >构造方法

构造方法

时间:2022-12-26 16:46:11浏览次数:28  
标签:无参 构造方法 Person 实例 public 构造函数

类和对象的区别?

我们可以把类理解成对于一个物品的设计图纸,对象就是那个具体的物品.也即类的实例化.比如下面的这个类

public class Person {
    public int age;
    public String name;

    public void sleep(){
        System.out.println("睡觉");
    }
}

这个person类中声明了它所包含的属性和方法,也就是人所具有的特征和行为方式.但这时候我们是不能够直接使用它的,需要对他进行实例化把它变成一个对象之后才能调用它的属性和方法.那么如何才能把类变成对象呢?只需要new 一下就能获得一个对象了.

public static void main(String[] args){
    Person person = new Person();
    person.name="张三";
    person.age=10;
    person.sleep();
}  

在类向对象的转变过程中用到了什么方法呢?答案是构造函数.如何证明类的实例化过程中是构造函数在起作用?我们可以在构造函数的方法体中加上一句输出语句,如果对象的实例化是用到构造方法的话,那么这句输出语句就会被打印在控制台上.或者把构造方法的访问修饰符改为private,接着再看看new 对象的时候还能不能成功.实验过后会发现new对象本质上就是在调用构造方法.

public class Person {
    public int age;
    public String name;

    //类的实例化过程中调用的是构造函数,就算不写也会默认生成空的构造函数
    public Person(){System.out.println("输出一句话")}

    public void sleep(){
        System.out.println("睡觉");
    }
}  

构造函数的方法名与类名相同,没有返回值,构造函数的作用就是对类进行初始化.所有的类都有构造函数,就算你不写,系统也会默认生成无参构造函数,如果你有自定义构造函数,那么默认的无参构造方法就会被覆盖失效.

public static void main(String[] args){
    //由于默认的无参构造函数被自定义函数覆盖,对象的实例化不能成功,会出现编译时异常
    Person person = new Person();
    //此时对象的实例化调用的是自定义的有参构造函数,对象创建成功
    Person p1 = new Person(20, "张三");
}

  

为了避免这种情况的发生,我们需要在自定义构造方法后再补写一个无参构造方法.此时就会构成方法的重载(同名不同参,对返回值没有要求),但除了构造方法的重载以外,普通方法也能够进行重载,使用重载的好处就是我们可以在不改变原方法的基础上新增功能.此时main方法里的两种实例化方式都会成功.另外需要无参构造函数的另一个原因是与继承相关.

public class Person {
    public int age;
    public String name;

    //多参构造
    public Person(int age,String name){
        this.age=age;
        this.name=name;
    }
    //无参构造
    public Person(){}

    public void sleep(){
        System.out.println("睡觉");
    }
}  

在子类继承父类时,会自动继承父类的默认构造函数,如果父类当中只有自定义的有参构造而没有显示默认构造的话那么子类在继承父类后会报错(没有默认构造方法可用).此时有两种解决方式,一种是让子类也采用有参构造方法(其中调用父类的有参构造方法),实例化对象也就通过只能有参构造去new了,通过无参构造去实例化子类对象是行不通的,编译器会报错.还有一种就是在父类当中显示无参构造方法,此时不管是通过无参构造还是有参构造都能够完成类的实例化.这种方式要更推荐一些. 

public class Jinsang extends Person{
    //子类的有参构造方法
    public Jinsang(int age, String name) {
        //调用的是父类的有参构造
        super(age, name);
    }
}
public static void main(String[] args){
    //通过无参构造来实例化对象行不通,会报错
    Jinsang jinsang1 = new Jinsang();
    //可以有参构造来实例化对象
    Jinsang jinsang = new Jinsang(20, "zhangsan");
}

  

  

标签:无参,构造方法,Person,实例,public,构造函数
From: https://www.cnblogs.com/heda/p/17005312.html

相关文章

  • 构造函数的继承和派生类选择基类的构造方法
    对于构造方法的继承需要注意2点:初始化一个对象时,基类baseclass的构造方法总是会首先执行基类baseclass的有参构造方法不会被继承,在派生类中需要我们重新定义新的构造......
  • Java 中匿名内部类的构造方法
    因为匿名内部类没有名字这个特殊性质,所以我们无从给它指定构造方法,构造方法必须和类名同名,类名都没有,构造方法就无从谈起了。但是匿名内部类可以通过直接调用父类的构造方......
  • Java继承构造方法的注意点
    父类:注意(x,y是private,不能继承到子类中)classPar{privateintx;privateinty;inta;publicPar(){}publicPar(intx,inty){t......
  • JAVA中子类继承时构造方法注意事项
    JAVA中子类继承时构造方法注意事项类的继承不容易理解的一种情况:父类只存在有参构造,子类的构造方法必需要做相应的处理,比如说也创建有参构造,为什么?1、任何类,如果无显......
  • Effective Java-2. 当构造方法参数过多时使用builder模式
    背景静态工厂和构造方法不能很好的拓展到很多可选参数的场景,因为参数过多的时候,调用其构造方法不太能知道每个位置参数的含义,容易出bug那么为这个类编写什么样下的构造方......
  • Effective Java-1.考虑使用静态工厂方法代替构造方法
    静态工厂方法的优点不像构造方法,静态工厂是有名字的精心构造的名称使得静态工厂方法更容易使用和理解,即知道创建的是什么对象与构造方法不同,不用每次都创建一个新的......
  • 安卓逆向4.xpsoed hook构造方法
    大纲获取所有类获取所有字段或者所有方法1.获取所有类并打印  2.遍历所有字段  3.遍历所有方法  集合  由于回家了,懒得敲代码,所以就这样了......
  • Java 变量作用域、构造方法官方教程
    一、变量作用域Java中的变量有3种:......
  • java中方法的细分(普通方法,静态方法,构造方法)
    1.1普通方法方法通俗点来讲用于描述一个对象的行为.例如一个人可以有很多行为,吃饭睡觉打豆豆,而这些行为是由方法来实现的。行为也被称作方法或者函数.代码示例:classPe......
  • C#中子类调用父类的构造方法
    本文实例讲述了C#中实现子类调用父类的方法,分享给大家供大家参考之用。具体方法如下:publicclassPerson{publicPerson(){Console.WriteLine("我是人......