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!"); } }
相关文章推荐
- JavaSE基础之Java语言的跨平台原理(JVM)
- Java学习之路03--JavaSE基础(二)
- JavaSE基础 - 数组排序之选择排序
- JavaSE入门学习8:Java基础语法之数组
- 黑马程序员--javaSE--多线程基础总结
- 学习笔记之JavaSE(9)--Java基础语法8
- JAVASE基础-day26(网络编程)
- JavaSE入门学习1:计算机基础知识
- JavaSE基础学习笔记-继承
- javaSE_8系列博客——重要的基础Java类——Exceptions(异常处理机制)--4--总结
- JAVASE基础(五)
- 快速学习javaSE基础3-java必须了解的基本语法1(熟记)
- JavaSE基础之异常体系
- JavaSE基础复习六:多线程
- javase基础入门复习笔记
- JavaSE 基础 第56节 多线程应用
- javaSE基础12之接口
- 黑马程序员_JavaSE基础08 之 单例设计模式 继承 覆盖
- JavaSe基础XX17——常用对象API-集合框架_4
- JAVASE基础(三)