您的位置:首页 > 编程语言 > Java开发

JAVASE基础(九)

2017-08-15 21:05 176 查看

一、单例设计模式

单例设计模式:保证一个类在内存中只有一个对象。

1.饿汉单例模式

饿汉单例设计模式的步骤:

1. 私有化构造函数。

2. 声明本类的引用类型变量,并且创建本类的对象。

3. 提供一个公共的方法获取本类的对象。

//饿汉单例设计模式
class Single{

//创建本类的对象。
private static Single s  = new Single();

//私有化构造函数
private Single(){}

//提供一个公共的方法获取本类的对象。
public static  Single getInstance(){
return s;
}
}


2.懒汉单例设计模式

懒汉单例设计模式:

1. 私有化构造函数。

2. 声明变量的引用类型变量,但是先不要创建 本类的对象。

3. 提供一个公共静态的方法获取本类的对象,获取之前先判断是否已经创建了本类的对象,如果没有创建,那么先创建本类的对象,然后再返回。否则直接返回即可。

//懒汉单例设计模式
class Single2{

//声明变量的引用类型变量,但是先不要创建 本类的对象。
private  static Single2 s;

//私有化构造函数
private Single2(){}

//提供一个公共静态的方法获取本类的对象,获取之前先判断是否已经创建了本类的对象,如果没有创建,那么先创建本类的对象,然后再返回。否则直接返回即可。
public static Single2 getInstance(){
if(s==null){
s =new  Single2();
}
return s;
}
}


总结:推荐使用:饿汉单例设计模式。懒汉单例设计模式存在线程安全问题。

二、继承

继承的格式:

class  类名1  extends 类名2{

}


继承要注意的细节:

1. 子类可以继承父类的成员,但是千万不要为了减少重复代码而且继承,只有

真正存在继承关系的情况下才去继承。

2. 父类私有的成员是不能被继承的。

3. 父类的构造方法也是不能被继承的。

4. 创建子类对象时默认会先调用父类的无参的构造函数。

疑问:创建子类对象时为什么会调用父类的构造函数?作用是什么?

作用: 调用父类的构造方法的作用是为了初始化从父类继承下去的属性。

super关键字:

super关键字代表的是父类的引用空间。

super关键字的作用:

1. 如果子父类存在着同名的成员时,在子类中默认是访问子类的成员,可以通过super关键字指定访问父类的成员。

2. 创建子类对象时,默认会先调用父类无参的构造函数, 通过super关键字可以在子类的构造函数中指定调用父类的构造函数。

super调用父类的构造函数要注意的细节:

1. super关键字调用构造函数的时候,必须是构造函数中的第一个语句。

2. super、this关键字调用调用构造函数的时候,不能同时出现在同一个构造函数。(因为两个都需要是第一个语句)

class Fu{

int x = 10;

String name;

public Fu(String name){
this.name = name;
System.out.println("父类带参的构造函数....");
}

public Fu(){
System.out.println("父类无参的构造函数....");
}

public void eat(){
System.out.println("小头爸爸吃番薯...");
}

}

//子类
class Zi extends Fu{

int x = 20;

public Zi(String name){
super(name); //调用父类一个参数的构造函数...
//this(); //调用本类无参的构造函数
System.out.println("子类构造函数....");

//super();  //调用了父类无参的构造函数....
}

public Zi(){}

public void print(){
super.eat();
System.out.println("x:"+super.x); // 10
}

public void eat(){
System.out.println("大头儿子吃龙虾...");
}

}

class Demo9
{
public static void main(String[] args)
{
//

//new Zi().print();

Zi zi = new Zi("大头儿子");
System.out.println("名字:"+ zi.name);

}
}


方法的重写: 子父类存在同名的成员函数称作为函数的重写。

函数的重写的应用场景:父类的功能无法满足子类的需求。

方法重写的要求:

1. 方法重写时,函数名与形参类别必须一致。

2. 方法重写时, 子类的权限修饰符必须要大于或者等于父类的权限修饰符。

3. 方法重写时, 子类的返回值类型必须要小于或者等于父类的返回值类型

4. 方法重写时, 子类抛出的异常类型必须要小于或者等于父类抛出的异常类型。

class Animal{

String name ="动物";

String color;

public Animal(String name,String color){
this.name = name;
this.color = color;
}
}

class Fish extends Animal{

String name = "鱼";

int age;

//指定调用父类带参的构造函数
public Fish(String name,String color,int age){

super(name,color);
this.age = age;
}
}

class Demo1
{
public static void main(String[] args)
{
System.out.println("Hello World!");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息