六、java基础-单例模式_继承_覆盖_多态
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基础-单例模式_继承_覆盖_多态的更多相关文章
- Java基础教程(18)--继承
一.继承的概念 继承是面向对象中一个非常重要的概念,使用继承可以从逻辑和层次上更好地组织代码,大大提高代码的复用性.在Java中,继承可以使得子类具有父类的属性和方法或者重新定义.追加属性和方法. ...
- Java基础笔记-抽象,继承,多态
抽象类: abstract修饰 抽象方法必须定义在抽象类中,抽象类不能创建对象. 在抽象方法中可以不定义抽象方法,作用是:让该类不能建立对象. 特点是: 1.定义在抽象类中 2.方法和类都用abstr ...
- Java基础学习笔记七 Java基础语法之继承和抽象类
继承 继承的概念 在现实生活中,继承一般指的是子女继承父辈的财产.在程序中,继承描述的是事物之间的所属关系,通过继承可以使多种事物之间形成一种关系体系. 例如公司中的研发部员工和维护部员工都属于员工, ...
- Java基础-封装和继承
@ 目录 Java基础知识(封装和继承) 一. 封装 1.1 封装的目的 1.2 封装的好处 1.3 封装的步骤 1.4 封装的例子 1.5 小结 二. 继承 2.1 继承的介绍 2.2 生活中的继承 ...
- Java基础系列 - 抽象类继承和接口实现
package com.inter; /** * 继承和接口的关系,单继承,多接口 * java不支持多继承,但可通过接口实现多重继承 */ public class test2 { public s ...
- Java基础第一天--继承、修饰符
继承 继承的概述: 继承是面向对象三大特征之一.可以使得子类具有父类的属性和方法,还可以在子类中重新定义,追加属性和方法. //创建父类 public class Fu{ public void sh ...
- C#和Java的类、继承、重写与多态
面向对象的三大特性是封装.继承.多态,C#和Java都是面向对象的语言所以他们的类.继承.重写与多态有很多共同点,但是实现上也存在一定的区别.其中Java中其实没有虚函数的概念,也可以认为Java的函 ...
- java 三大特性_继承、封装、多态_day005
一.继承: java的三大特性之一.两个类之间通过extends关键字来描述父子关系,子类便可拥有父类的公共方法和公共属性.子类可以继承父类的方法和属性,子类也可以自己定义没有的方法或者通过覆盖父类的 ...
- java基础知识总结--继承和接口
什么是继承?什么是接口?他们之间的区别和联系是什么? 什么是继承? 继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能.多个类中存在相同属性和行 ...
随机推荐
- Anniversary party POJ - 2342
题目链接 经典的树形dp,最大独立集,对于每个点就有2个状态,选/不选 设\(dp_{i,0}\)表示不选第i个,\(dp_{i,1}\)表示选第i个,容易得到其状态转移 \(dp_{i,0} = \ ...
- 【Go语言系列】1.4、GO语言简介:第一个Go语言程序
接下来我们来编写第一个 Go 程序 hello.go(Go 语言源文件的扩展是 .go),代码如下: // 声明 main 包 package main import ( "fmt" ...
- Centos5.5+LAMP环境
Note:如果网络正常,apache服务正常,仍然不能访问网页.需要检查linux 防火墙是否关闭. ( 先重新启动防火墙 service iptables start 然后输入配置防火墙的命令并查看 ...
- 微信小程序开发调试阶段不校验请求域名
在微信小程序开发官网上有说明: 在开发者工具的右上角有详情选项,可以勾选不校验合法域名,之后就可以与本地ip进行通信了!
- 吴裕雄 python 神经网络——TensorFlow训练神经网络:不使用滑动平均
import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data INPUT_NODE = 784 ...
- 802.11r mixed mode
* 802.11r mixed mode support – Untill this code(8.0), if you enable 802.11r fast secure roaming, onl ...
- __str__()方法和__repr__()方法
有时候我们想让屏幕打印的结果不是对象的内存地址,而是它的值或者其他可以自定义的东西,以便更直观地显示对象内容,可以通过在该对象的类中创建或修改__str__()或__repr__()方法来实现(显示对 ...
- Spring AOP 中 advice 的四种类型 before after throwing advice around
spring AOP(Aspect-oriented programming) 是用于切面编程,简单的来说:AOP相当于一个拦截器,去拦截一些处理,例如:当一个方法执行的时候,Spring 能够拦截 ...
- CircleLinkList(循环链表)
尾插法和循环链表. #include <stdio.h> #include <stdlib.h> typedef struct CircleLinkList { int dat ...
- 简单聊一聊Ansible自动化运维
一.Ansible概述 Ansible是今年来越来越火的一款开源运维自动化工具,通过Ansible可以实现运维自动化,提高运维工程师的工作效率,减少人为失误.Ansible通过本身集成的非常丰富的模块 ...