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)发生方法覆盖的条件:
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); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
问题内容: 为什么超类的实例变量在继承中不被覆盖? 问题答案: 因为继承旨在修改行为。行为是通过方法公开的,这就是为什么可以覆盖它们的原因。 字段不是行为而是状态。您不需要修改它,也不需要修改超类使用的私有方法。它们旨在让超类完成其工作。
在这个程序中,我试图通过使用子类ResziableCircle My code中的重写方法为radious变量赋值 为什么在调用resize函数后,输出中有radious zero的值?我试图找出代码中的问题在哪里,但找不到。
本文向大家介绍C++/java 继承类的多态详解及实例代码,包括了C++/java 继承类的多态详解及实例代码的使用技巧和注意事项,需要的朋友参考一下 C++/java 继承类的多态详解 学过C++和Java的人都知道,他们二者由于都可以进行面向对象编程,而面向对象编程的三大特性就是封装、继承、多态,所有今天我们就来简单了解一下C++和Java在多态这方面的不同。 首先我们各看一个案例。 C++
本文向大家介绍JavaScript原型继承和原型链原理详解,包括了JavaScript原型继承和原型链原理详解的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了JavaScript原型继承和原型链原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 在讨论原型继承之前,先回顾一下关于创建自定义类型的方式,这里推荐将构造函数和原型模式组
有没有可能编写一个Avro schema/IDL来生成一个Java类,或者扩展一个基类,或者实现一个接口?似乎生成的Java类扩展了< code > org . Apache . avro . specific . specificrecordbase 。所以,工具可能是正确的选择。但是,我不知道这是否可能。 我看过一些示例,其中包含在每个特定架构中定义显式“类型”字段的建议,其关联性大于继承语义
本文向大家介绍PHP接口继承及接口多继承原理与实现方法详解,包括了PHP接口继承及接口多继承原理与实现方法详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP接口继承及接口多继承原理与实现方法。分享给大家供大家参考,具体如下: 在PHP的接口中,接口可以继承接口。虽然PHP类只能继承一个父类(单继承),但是接口和类不同,接口可以实现多继承,可以继承一个或者多个接口。当然接口的继承也是