欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Effective Java笔记第一章创建和销毁对象第四节通过私有构造器强化不可实例化的能力

程序员文章站 2022-03-10 17:16:20
Effective Java笔记第一章创建和销毁对象第四节通过私有构造器强化不可实例化的能力1.很多工具类不希望被实例化,实例对他没有任何意义。在缺少显式构造器的情况下,编译器会自动提供一个公有的,无参的缺省构造器(default constructor).2.企图通过将类做成抽象类来强制该类不可被实例化,这是行不通的。该类可以被子类化,并且该子类可以被实例化。......

Effective Java笔记第一章创建和销毁对象

第四节通过私有构造器强化不可实例化的能力

1.很多工具类不希望被实例化,实例对他没有任何意义。在缺少显式构造器的情况下,编译器会自动提供一个公有的,无参的缺省构造器(default constructor).

2.企图通过将类做成抽象类来强制该类不可被实例化,这是行不通的。该类可以被子类化,并且该子类可以被实例化。

抽象父类:

public abstract class DemoAbstract {
    public void test(){
        System.out.println(111111);
    }
}

子类:

public class DemoAbstractSon extends DemoAbstract {
    @Override
    public void test() {
        super.test();
        System.out.println(222222);
    }
}

测试:

public class Demo2 {
    public static void main(String[] args) {
        //抽象类不可以实例化
//        DemoAbstract demoAbstract = new DemoAbstract();
        //可以通过创建子类来获得父类对象,调用父类的方法
        DemoAbstract abstractSon = new DemoAbstractSon();
        abstractSon.test();
    }
}

3.我们可以让类只包含私有构造器。

public class DemoPrivate {
    //私有构造器,不可以被实例化和被继承
    private DemoPrivate(){
        //避免在类的内部调用构造器
        throw new AssertionError();
    }
    public void test(){
        System.out.println(111111);
    }

    public static void main(String[] args) {
        //会爆AssertionError错误
        DemoPrivate demoPrivate = new DemoPrivate();
        System.out.println(demoPrivate);
    }
}

本文地址:https://blog.csdn.net/zh123456_789/article/details/111599182