当你没有显示的调用父类构造方法的时候,程序会自动先运行父类无参数构造方法。
被调用的父类的构造方法不能为私有。
你不能通过的程序中,父类的无参数构造方法为私有,而且自类构造方法没有显示地调用父类非私有的构造方法。所以系统自动调用无参数构造方法的时候就出错了。
可通过的程序中父类无参数构造方法都是非私有的。
将不可通过的子类的构造函数的第一条指令改为父类的非私有构造方法,如super(15);就可以通过。其实你的问题不算是问题。定义抽象类可以有抽象方法,也可以没有抽象方法,也可以全部都是抽象方法。定义为抽象类就是为了不让这个类创建对象、如果想创建对象。子类继承就可以了、 然后抽象类的引用指向子类的对象。这叫Java中的多态!!子类new对象的时候需要访问父类的构造方法。父类的构造方法定义为private。子类无法访问,自然创建不了对象、您好,构造方法私有化,也就是说,这个类的构造方法是私有的。比如:
public class Person{
private String name;
Private Person(String Name){ //私有的构造方法
thisname = name;
}
}
我们不能在外部实例化这个Person对象的类!
比如:
Public Class TestPerson{
public static void main(String args[]){
Person per = new Person(); //此步是错误的!因为你已经将person类的构造方法设置为
private 了
}
}
如果我们想在Person类的外部使用Person类的对象,只能在person类的内部实例化一个Person类的对象,然后调用这个对象,而不能再外部实例化新的对象。
public class Person{
private String name;
Private Person newPerson; //Person类唯一的实例化对象
Private Person(String Name){ //私有的构造方法
thisname = name;
}
newperson = new Person("百度知道");
Public Person getInstance(){ //将newperson返回给外部调用处!!!
return newperson;
}
}
外部的Person类的所有对象只能是对Person内部newperson对象的引用。
外部一千一万个对象也都只能是对Person内部newperson对象的引用。
因为外部定义的Person类对象没有实例化能力。这就是单例设计模式,从头至尾只有一个对象的实例(单例)
构造方法是私有的,则意味着无法从除自身之外的任何类访问它。这是Java提供的访问控制机制。
使用得当,它可以产生安全性和功能性。构造函数(如常规方法)也可以声明为私有。可能想知道为什么需要一个私有构造函数,因为它只能从它自己的类访问。
扩展资料:
工作原理
由四方面组成:
1,Java编程语言。
2,Java类文件格式。
3,Java虚拟机。
4,Java应用程序接口。
当编辑并运行一个Java程序时,需要同时涉及到这四种方面。使用文字编辑软件(例如记事本、写字板、UltraEdit等)或集成开发环境(Eclipse、MyEclipse等)在Java源文件中定义不同的类。
通过调用类(这些类实现了Java API)中的方法来访问资源系统,把源文件编译生成一种二进制中间码,存储在class文件中,然后再通过运行与 *** 作系统平台环境相对应的Java虚拟机来运行class文件,执行编译产生的字节码,调用class文件中实现的方法来满足程序的Java API调用。
参考资料来源:百度百科-Java
1 说明1)单例模式:确保一个类只有一个实例,自行实例化并向系统提供这个实例
2)单例模式分类:饿单例模式(类加载时实例化一个对象给自己的引用),懒单例模式(调用取得实例的方法如getInstance时才会实例化对象)(java中饿单例模式性能优于懒单例模式,c++中一般使用懒单例模式)
3)单例模式要素:
a)私有构造方法
b)私有静态引用指向自己实例
c)以自己实例为返回值的公有静态方法
2实例
饿单例模式:
复制代码代码如下:
package comwishmodedesign;
public class HungrySingleton {
private static HungrySingleton instance = new HungrySingleton();
private HungrySingleton(){
}
public static HungrySingleton getInstance(){
return instance;
}
}
懒单例模式:
复制代码代码如下:
package comwishmodedesign;
public class Singleton {
private Singleton(){
}
private static Singleton instance;
public static synchronized Singleton getInstance(){ //多线程时注意线程安全
if(instance == null){
instance = new Singleton();
}
return instance;
}
}
测试类Driverjava
复制代码代码如下:
package comwishmodedesign;
public class Driver {
public static void main(String[] args) {
Singleton s1 = SingletongetInstance();
Singleton s2 = SingletongetInstance();
Systemoutprintln(s1==s2); //true
}
}
3优点和适用场景
1)单例模式的优点:
在内存中只有一个对象,节省内存空间。
避免频繁的创建销毁对象,可以提高性能。
避免对共享资源的多重占用。
可以全局访问。
2)适用场景:
需要频繁实例化然后销毁的对象。
创建对象时耗时过多或者耗资源过多,但又经常用到的对象。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)