java 构造方法私有化

1.属性定义时都使用了private进行声明,对于构造方法也可以使用private声明,则此时构造方法就被私有化了.

构造方法非私有化
Single类里面是存在构造方法的(如果一个类中没有明确的定义一个构造方法的话,则会自动生成一个无参的、什么都不做的构造方法),所以直接实例化对象,而后调用类中提供的print()方法.

class Single{   //定义一个类,此类默认提供无参数构造方法
    public void print(){
         System.out.println("Hello World")
         }
    }
public class TestDemo{
          public static void main(String args[]){
             Single  in=null;      //声明对象
             in=new  Single();   //实例化对象
             in.print();             //调用方法 
             }
          }

运行结果
Hello World

构造方法私有化
发现实例化Single类对象时,出现了编译错误,因为构造方法被私有化了,无法在外部调用,即无法在外部实例化Single类对象.
在这里插入图片描述
在保证Single类中的构造方法不修改不增加,以及print()方法不修改的情况下,如何操作才能让类的外部通过实例化对象在去调用print()?

思考一:

class Single{                 //定义一个类
    Single instance=new Single();    //在内部实例化本类对象
    private Single(){
    }
    public void print(){
    System.out.println("Hello World")}
}

思考二:
对于类中的普通属性,默认情况下一定要在本类存在了实例化对象后才可以进行调用,可是现在在Single类的外部无法产生实例化对象,那么必须让Single类中的instance属性可以在没有Single类实例化对象进行调用,这可以使static完成,static定义的属性特点:类名称直接调用,并且没有实例化对象时也可以调用.

class Single{                 //定义一个类
     static  Single instance=new Single();    //可以由类名直接访问
    private Single(){   //构造方法私有化
    }
    public void print(){
    System.out.println("Hello World")}
}

在这里插入图片描述
运行结果
Hello World

思考三:类中的全部属性都应该封装,所以以上的instance属性应该进行封装,而封装后想要取得属性需要编写getter方法,只不过getter方法应该由类名称直接调用.
在这里插入图片描述

发布了60 篇原创文章 · 获赞 3 · 访问量 2210

猜你喜欢

转载自blog.csdn.net/ysy_1_2/article/details/104192723
今日推荐