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方法应该由类名称直接调用.
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值