首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java--多态性之上溯造型和下溯造型

引用Charlie Calverts对多态的描述——多态性是允许你将父对象设置成为一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。...Java中方法的绑定都是动态绑定,除非一个方法被声明为final....下面这条语句成立也是因为动态绑定: Animal a = new Dog(); 下溯造型: 上溯造型会丢失具体的类型信息,所以为了获取具体的类型信息可以使用 “下溯造型”。...然而,上溯造型肯定 是安全的;基础类不可能再拥有一个比衍生类更大的接口。因此,我们通过基础类接口发送的每一条消息都 肯定能够接收到。但在进行下溯造型的时候并不一定安全。...} } 如上代码所示,衍生类上溯造型会丢失数据,但再下溯造型回来后这些数据还存在。

1.3K110
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    造型模式——工厂模式

    工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。...适用场景: 类不知道自己要创建哪一个对象 类用它的子类来指定创建哪个对象 客户需要清楚创建了哪一个对象 **实现方式:**返回的也是一个抽象的产品,让其子类实现工厂接口; 优点: 一个调用者想创建一个对象...步骤 1 创建一个接口: Shape.java public interface Shape { void draw(); } 步骤 2 创建实现接口的实体类。...ShapeFactory.java public class ShapeFactory { //使用 getShape 方法获取形状类型的对象 public Shape getShape(String...FactoryPatternDemo.java public class FactoryPatternDemo { public static void main(String[] args) {

    31820

    Java经典23种设计模式之创造型模式(一)

    值得一提的是,设计模式并不是Java所特有。由于一直搞Android。这里就用Java为载体。...本文记录创造型模式里的工厂方法(Factory Method)、抽象工厂(Abstract Factory)、单例模式这三种。力求透彻。...还是结合Java设计模式(疯狂Java联盟版)来介绍。 1、Product 即产品,是个接口,详细干啥没说。...2.当一个类希望由它的子类来指定它所创建的对象的时候。 3.当想将创建对象的职责托付给多个帮助类中的某一个。而且希望将哪一个帮助子类是代理者这一信息局部化的时候。...3.当你要强调一系列相关的产品对象的设计以便进行联合使用时* 4当你提供一个产品类库,而只想显示它们的接口而不是实现时。

    38110

    造型模式——抽象工厂模式

    这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。...一、介绍 概述:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类 适用场景: 客户端(应用层)不依赖于产品类实例如何被创建、实现等细节 强调一系列相关的产品对象(属于同一产品族)一起使用创建对象需要大量的重复代码...提供一个产品类的库,所有的产品以同样的接口出现,从而使得客户端不依赖于具体的实现 **实现方式:**在一个产品族里面,定义多个产品 **优点:**当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象...Shape.java public interface Shape { void draw(); } 步骤 2 创建实现接口的实体类。...Color.java public interface Color { void fill(); } 步骤 4 创建实现接口的实体类。

    19210

    造型模式——建造者模式

    建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。...一个 Builder 类会一步一步构造最终的对象。该 Builder 类是独立于其他对象的。...一、介绍 概述:将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示 适用场景: 需要生成的对象具有复杂的内部结构。 需要生成的对象内部属性本身相互依赖。...然后我们创建一个 Meal 类,带有 Item 的 ArrayList 和一个通过结合 Item 来创建不同类型的 Meal 对象的 MealBuilder。...Meal.java import java.util.ArrayList; import java.util.List; public class Meal { private List<Item

    20520

    Java|Java面向对象

    1 什么是面向对象 百度上解释面向对象是相对于面向过程来讲的,面向对象方法,把相关的数据和方法组织为一个整体来看待,从更高的层次来进行系统建模,更贴近事物的自然运行模式。...面向过程就是我们需要实现一个功能的时候,我们需要实现功能的每一个步骤都需要自己来写,相对的面向对象则是,在java里我们需要实现一个功能,我们直接从JDK调用现成的类,比如在执行数组相关操作时,我们直接调用...这就是面向对象,这里就主要强调了一个会做饭洗碗的对象,即我们从执行者变成了指挥者,帮我们做事情的就叫对象。...2 类的定义以及与对象的关系 我们每用java写一个程序,都会定义一个类,java作为一门面向对象编程语言,那类与对象的关系会是什么呢。...我们先清楚什么是类和对象,类是一组相关属性和行为的集合,这个集合里可能就会存在某一事物的属性以及这一事物可以干什么事情,对象就是这个事物的具体表现,即类是抽象的,对象是具体的,类是对象的模板,对象是类的实体

    1.9K42

    Java——Java面向对象

    概述: Java是面向对象的程序设计语言,Java语言提供了定义类、成员变量、方法等最基本的功能。...类用于描述客观世界里某一类对象的共同特征,而对象则是类的具体存在,Java程序使用类的构造器来创建该类的对象。...对象和类: Java是面向对象的程序设计语言,类是面向对象的重要内容,可以把类当成一种自定义类型,可以使用类来定义变量,这种类型的变量统称为引用变量。也就是说,所有类是引用类型。...对象是由类创建出来的,可以说类时对象的抽象,对象是类的实例。 对象的概念: Java 是面向对象的编程语言,对象就是面向对象程序设计的核心。...Java编程思想一书中有一段对面向对象的总结非常清晰到位,可谓是面向对象的精华所在: 1、万物皆对象 2、程序时对象的集合,它们通过发送消息来告知彼此所需要做的 3、每个对象都有自己的由其他对象所构成的存储

    2.2K21

    java引用变量和对象(java变量和对象)

    Java对象及其引用 先搞清楚什么是堆,什么是栈。...注意,栈内存储的除了基本类型的变量(int 这种类型的变量)还会存储对象的引用变量。java中,引用变量实际上是一个指针,它指向的是堆内存中对象实例。...后来才知道,在许多Java书中,把对象对象的引用混为一谈。可是,如果我分不清对象对象引用, 那实在没法很好地理解下面的面向对象技术。...2)末尾的()意味着,在对象创建后,立即调用Vehicle类的构造函数,对刚生成的对象进行初始化。构造函数是肯定有的。如果你没写,Java会给你补上一个默认的构造函数。...; 字符串对象“I am Java!”在打印后即被丢弃。有人把这种对象称之为临时对象

    2.1K40

    java——面向对象

    这时你糊涂了,那么java系统也会糊涂,所以不能根据返回值来判断一个方法是否重载 This关键字: 定义: this关键字总是指向调用该方法的对象。...根据this出现位置的不同,this作为对象的引用有两种情况:1、构造器中引用该构造器正在初始化的对象;2、在方法中引用调用该方法的对象 注意事项: 静态方法中不能使用this关键字,因为静态方法通过类名直接调用...,可以不用对象调用,既然连对象都没有了,何来的this 在类的某个方法中调用该类的另一个方法时,可以省略this关键字比如在run()方法中调用jump()方法,可以直接jump();调用,虽然这里的this...编译时类型由声明该变量时使用的类型决定,运行时类型由实际赋给该变量的对象决定。...与方法不同的是,对象的实例变量不具备多态性,所以这里输出的是父类的实例变量。

    76120

    初识Java对象

    初始Java对象 1什么是面向对象编程(面向对象编程与 面向过程编程的区别) 生活中举例 1面向对象编程:当你要实现一个功能的时候,不关心具体步骤,而是找一个已经具备该功能的人来帮我做 2面向过程编程...,不需要我参与,这就是面向对象编程的好处 java代码举例(以输出数组内容举例) 1 public class Test { 2 public static void main(String...便于修改,提高代码的可维护性 private关键字的介绍 1. private是一个权限修饰符,是java中的最小权限修饰符 2....这是因为java给我们默认提供了一个无参数的构造方法但是一旦你自己自定义了一个构造方法,java 提供的默认无参构造方法就会失效 构造方法的定义格式 修饰符 构造方法名(参数列表){ // 方法体 }...JavaBean 是 Java语言编写类的一种标准规范。符合 JavaBean 的类,要求类必须是具体的和公共的,并且具有无 参数的构造方法,提供用来操作成员变量的 set 和 get 方法。

    59820

    java对象拷贝

    java赋值是复制对象引用,如果我们想要得到一个对象的副本,使用赋值操作是无法达到目的的: @Test public void testassign(){ Person p1=new Person(...,也就是说他们的初始状态完全一样,但以后可以改变各自的状态,而互不影响,就需要用到java对象的复制,如原生的clone()方法。...浅拷贝:被复制对象的所有值属性都含有与原来对象的相同,而所有的对象引用属性仍然指向原来的对象。 深拷贝:在浅拷贝的基础上,所有引用其他对象的变量也进行了clone,并指向被复制过的新对象。...如果被复制对象的属性包含其他实体类对象引用,那么这些实体类对象都需要实现cloneable接口并覆盖clone()方法。...被复制对象的继承链、引用链上的每一个对象都实现java.io.Serializable接口。这个比较简单,不需要实现任何方法,serialVersionID的要求不强制,对深拷贝来说没毛病。

    2.3K20

    Java——对象比较

    参考链接: 用Java传递和返回对象 前言  本篇博客主要梳理一下Java对象比较的需要注意的地方,将分为以下几个方面进行介绍:  ==和equals()方法  hashCode()方法和equals...= v2[i]) return false; i++; } return true; } } return false; } Java中很多类都自身重写了equals()方法,但是要使我们自定义的对象能正确比较...hashCode()是根类Object中的默认方法,查看JDK:  hashCode()方法与equals()方法没有任何关系,hashCode()的存在是为了服务于建立在散列表基础上的类,如Java集合中的...Java中提供了两种方式来使得对象可以比较,实现Comparator接口或者Comparable接口。 Comparable接口  以able结尾的接口都表示拥有某种能力。..., z)>0)) 可以推导出compare(x, z)>0 相等替代性:compare(x, y)==0可以推导出compare(x, z)==compare(y, z) 小结  简单总结一下本篇关于Java

    1.6K30

    Java面向对象

    Java面向对象 面向对象概念 什么是Object对象对象 相当于中文语义”东西”。...要求Java中的所有实体类成员变量全部私有化,最少提供一个无参数构造方法,对应成员变量实现setter和getter方法 2....关键字:extends 格式: class Son extends Father { } //一个孩子只能有一个父亲 //一个父亲可以有多个孩子 特点 Java为单继承,一个类只能有一个直接父类...这样某个类的改变,就会影响到其他和该类相关的类 打破了封装性 总结 Java中只有单继承 子类可以继承父类的非私有属性和方法(非private修饰的) 执行子类的构造方法前会默认执行父类的无参构造方法...,接口引用指向实现类对象 instanceof用以比较对象是否是类或父类的实例,接口的实现类 访问权限权限修饰符 Java中的访问修饰符 类内部 同包下 子类中 非同包 public √ √ √ √

    60910

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券