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方法应该由类名称直接调用.