1、单例模式:

1)提出原因
  是由gof 也就是四人组提出来的。为了保证jvm中某一类型的java对象永远只有一个,同时也是为了节省内存的开销。因为外面程序可以通过new的方法直接调用类里面的构造方法。导致该类的对象不止一个。
2)定义
  单例模式的意思就是只有一个实例。单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。
A、构造方法私有化;
B、对外提供一个公开的、静态的、获取当前类型对象的方法
C、提供一个当前类型的静态变量。
3)分类
 A、饿汉式单例模式:在类加载时就完成了初始化,所以类加载较慢,但获取对象的速度快

public class CustomerSingleton {
private static CustomerSingleton instance = new CustomerSingleton();//静态私有成员,已初始化 private CustomerSingleton()
{
//私有构造函数
System.out.println("私有构造函数执行");
} public static CustomerSingleton getCustomerInstance() //静态,不用同步(类加载时已初始化,不会有多线程的问题)
{
return instance;
}
}

B、懒汉式单例:类加载时不初始化

当调用getInstance方法的时候,底层的对象才会考虑创建,所以显得比较懒

 public class UserSingleton {
   //提供一个当前类型的静态变量
  public static UserSingleton intance=null;   //构造方法私有化
  private UserSingleton(){
   System.out.println("构造函数私有化");
  }    //对外提供一个公开获取Singleton 对象的方法
  public static UserSingleton getInstance(){
    if(intance==null){
     intance=new UserSingleton();
  }
   return intance;
  }
}

2、继承

1)继承的语法:java中类只支持单继承,一个类继承了A类就无法再继承B类,继承是面向对象的重要概念。一个类没有现实的继承其他类,默认继承sun提供的java.lang.object

   [修饰符列表] class  子类名   extends   父类名{
      类体;

  }

备注:

java语言中子类继承父类,会将父类中所有的数据全部继承,包括私有的也能继承过来;

但是在子类中无法直接访问父类中的私有数据。但是可以间接访问,构造方法无法被子类继承。

3、方法的覆盖

1)什么时候方法要进行覆盖?
 如果父类中的方法已经无法满足当前子类的业务需求,需要将父类中的方法进行覆盖重新子类如果重写父类的方法之后,子类对象一定调用的是重写之后的方法。覆盖指的是成员方法和成员变量无关。

2)发生方法覆盖的条件:
  第一:发生在具有继承关系的两个类之间
  第二:必须具有相同的方法名,相同的返回值类型,相同的参数列表
  第三:重写的方法不能比被重写的方法拥有更低的访问权限
  第四:重写的方法不能比被重写的方法抛出更宽泛的异常
  第五:私有的方法不能被覆盖(因为私有方法无法被子类访问,所以不能重写;必须是public的方法才能被覆盖,如果定义成了final是不可以被重写的)
  第六:构造方法无法被覆盖,因为构造方法无法被继承。
  第七:静态的方法不存在覆盖
  第八:覆盖指的是成员方法,和成员变量无关。

4、多态

向上转型:子转父(父类型的引用,指向子类型的对象);
 向下转型:父转子(子类型的引用,指向父类型的对象);
 多态编译期是静态绑定,而运行期是动态绑定

5、多态的经典例子

 public class Person {
   public void feed (Animal a){
   a.eat();
  }
} public class Animal {
  public void eat(){   }
} public class Dog extends Animal {
  public void eat(){
    System.out.println("狗在吃肉");
  }
} public class Cat extends Animal {
  public void eat(){
    System.out.println("猫在吃鱼");
   }
} public class Test01 {
  public static void main(String[] args) {
    Person p1=new Person();
     Dog d1=new Dog();
    Cat c1=new Cat();
    p1.feed(d1);
    p1.feed(c1);
  } }

更多设计模式理解,可参看博文:https://www.cnblogs.com/jiarui-zjb/p/9637308.html

六、java基础-单例模式_继承_覆盖_多态的更多相关文章

  1. Java基础教程(18)--继承

    一.继承的概念   继承是面向对象中一个非常重要的概念,使用继承可以从逻辑和层次上更好地组织代码,大大提高代码的复用性.在Java中,继承可以使得子类具有父类的属性和方法或者重新定义.追加属性和方法. ...

  2. Java基础笔记-抽象,继承,多态

    抽象类: abstract修饰 抽象方法必须定义在抽象类中,抽象类不能创建对象. 在抽象方法中可以不定义抽象方法,作用是:让该类不能建立对象. 特点是: 1.定义在抽象类中 2.方法和类都用abstr ...

  3. Java基础学习笔记七 Java基础语法之继承和抽象类

    继承 继承的概念 在现实生活中,继承一般指的是子女继承父辈的财产.在程序中,继承描述的是事物之间的所属关系,通过继承可以使多种事物之间形成一种关系体系. 例如公司中的研发部员工和维护部员工都属于员工, ...

  4. Java基础-封装和继承

    @ 目录 Java基础知识(封装和继承) 一. 封装 1.1 封装的目的 1.2 封装的好处 1.3 封装的步骤 1.4 封装的例子 1.5 小结 二. 继承 2.1 继承的介绍 2.2 生活中的继承 ...

  5. Java基础系列 - 抽象类继承和接口实现

    package com.inter; /** * 继承和接口的关系,单继承,多接口 * java不支持多继承,但可通过接口实现多重继承 */ public class test2 { public s ...

  6. Java基础第一天--继承、修饰符

    继承 继承的概述: 继承是面向对象三大特征之一.可以使得子类具有父类的属性和方法,还可以在子类中重新定义,追加属性和方法. //创建父类 public class Fu{ public void sh ...

  7. C#和Java的类、继承、重写与多态

    面向对象的三大特性是封装.继承.多态,C#和Java都是面向对象的语言所以他们的类.继承.重写与多态有很多共同点,但是实现上也存在一定的区别.其中Java中其实没有虚函数的概念,也可以认为Java的函 ...

  8. java 三大特性_继承、封装、多态_day005

    一.继承: java的三大特性之一.两个类之间通过extends关键字来描述父子关系,子类便可拥有父类的公共方法和公共属性.子类可以继承父类的方法和属性,子类也可以自己定义没有的方法或者通过覆盖父类的 ...

  9. java基础知识总结--继承和接口

    什么是继承?什么是接口?他们之间的区别和联系是什么? 什么是继承? 继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能.多个类中存在相同属性和行 ...

随机推荐

  1. Thread线程

    1.什么是线程? 线程( Thread ) 被称作轻量级进程( Lightweight Process ),线程是比进程更小一级的执行单元. 一个进程可以有多个线程,但至少有一个线程(当进程被初始化后 ...

  2. DHCP原理及报文格式

    DHCP原理及报文格式 DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是IETF为实现IP的自动配置而设计的协议,它可以为客户机自动分配IP地址. ...

  3. 如何在JSP页面里面显示xml格式的数据

    正常情况下,在jsp页面里的标签里写xml格式的数据,在浏览器里面的页面里显示出来的是乱码. 为什么会显示乱码呢?原来xml标签在jsp里会被解析为浏览器对象,因为xml最开始被设计出来是 为了写网页 ...

  4. Hive的安装与基础指令

    一.Hive安装 Hive的安装相对比较简单,Hive是基于Hadoop来使用的,所以搭建Hadoop伪分布式或完全分布式即可,Hive安装过程如下: ①安装并启动Hadoop 在博主的其他博客中有安 ...

  5. matlab练习程序(传染病模型)

    最近新型冠状病毒疫情越来越严重了,待在家中没法出去,学习一下经典传染病模型. 这里总结了五个模型,分别是SI模型,SIS模型,SIR模型,SIRS模型,SEIR模型. 这几种模型的特点先介绍一下. 首 ...

  6. 「SDOI2009」Bill的挑战

    「SDOI2009」Bill的挑战 传送门 状压 \(\text{DP}\) 瞄一眼数据范围 \(N\le15\),考虑状压. 设 \(f[i][j]\) 表示在所有串中匹配到第 \(i\) 位字符且 ...

  7. Tensorflow机器学习入门——ModuleNotFoundError: No module named 'tensorflow.keras'

    这个bug的解决办法: # from tensorflow.keras import datasets, layers, models from tensorflow.python.keras imp ...

  8. flask-script扩展

    在项目部署到线上时,指定端口号时,一般都不会在服务器上进行更改,所以使用flask-script就可以在Flask服务器启动时,通过命令行的方式传入参数,而不仅仅通过app.run()方法中传参.具体 ...

  9. 使用win32com操作woord的方法记录

    CSDN博客平台中有众多的 win32com 库操作word 的说明,对于通用的内容将一笔带过,主要介绍目前看来独一无二的内容. import win32com from win32com.clien ...

  10. 【转】bug management process

    What is Bug? A bug is the consequence/outcome of a coding fault What is Defect? A defect is a variat ...