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

九、多态【黑马JavaSE笔记】

文章目录 多态 (一)概述 (二)多态中成员访问特点 (三)多态的好处和弊端 (四)多态中的转型 多态 (一)概述 同一个对象,在不同时刻表现出来的不同形态 举例:猫 我们可以说猫是猫:Cat = new...---- (二)多态中成员访问特点 成员变量:编译看左边,执行看左边 成员方法:编译看左边,执行看右边 为什么成员变量和成员方法的访问不一样?...因为成员方法有重写,而成员变量没有 代码演示: Animals类: public class Animals { public int age = 40; public void show...String[] args) { Animals a = new Cat(); System.out.println(a.age); // 40 执行看左边(成员变量...,将来在使用的时候,使用具体的子类型参与操作 多态的弊端:不能使用子类的特有功能 ---- (四)多态中的转型 向上转型 ​ 从子类引用指向子类对象 向下转型 ​ 从父到子

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

多态

多态中成员访问特点 成员变量:编译看左边(FU),执行看左边 成员方法:编译看左边(FU),执行看右边(ZI) 成员方法和成员变量访问不同的原因是成员方法有重写,成员变量没有。...多态的好处与弊端 多态其实就是类引用指向子类对象,然后只能调用子类对象中重写的类中的方法执行,这其实简化了某些情况下的代码,提高了程序的复用性。...但是弊端就是他只能调用子类中重写的类的方法,子类中其他特有的方法无法使用。...这个弊端可以通过向下转型来实现: ```java Animal a = new Cat();//类引用指向子类对象,从子,向上转型,只能用重写的方法 Cat c = (Cat)a;//向下转型,从父到子

32530

Java子类与类之间的对象转换(说明继承)

从子类向类的转换称为向上转换(upcasting),通过向上转换,我们能够在编写程序时采用通用程序设计的思想,在需要使用子类对象的时候,通过把变量定义为类型,我们可以通过一个变量,使用该类型的所有子类型实例...首先是从子类向类的向上转换。...因此,从子类向类的转换不需要什么限制,只需直接将子类实例赋值给变量即可,这也是Java中的多态的实现机制。...,就需要将类型变量转换成对应的子类型变量。...,类引用不能访问子类新定义方法          System.out.println(b.a);// 子类覆盖了该属性,但类引用仍旧访问旧属性          System.out.println

3.6K20

this 和 super 关键字总结

this.report(); } void report() { } } 在上面的示例中,this 关键字用于两个地方: this.employees.length:访问类...Manager 的当前实例的变量 this.report():调用当前类 Manager 的实例方法 this 关键字是可选的,这意味着,上面的示例可以不显式使用此关键字,但是,使用此关键字可能会使代码更易读和易懂...super 关键字 super 关键字用于从子访问类的变量和方法。...Super { void bar() { super.number = 10; super.showNumber(); } } 在上面的例子中,Sub 类访问类成员变量...而 this 代表对本类对象的引用,指向本类对象;而 super 代表对类对象的引用,指向类对象;所以,this 和 super 都属于对象范畴,而静态方法是属于类范畴的东西。

30130

Vue 中,如何将函数作为 props 传递给组件

实际上,它与传递任何其他变量方式完全相同: export default...从子组件访问组件的作用域里数据 在许多情况下,我们试图解决的问题是访问来自不同作用域的数据。 组件有一个作用域,子组件有另一个作用域。...通常,我们希望从父组件访问子组件中的值,或者从子组件访问组件中的值。Vue阻止我们直接这样做,这是一件好事。 它使我们的组件更加具有封装性,并提高了它们的可重用性。...从父类获取值 如果希望子组件访问组件的方法,那么将方法直接作为 prop 传递似乎简单明了。 在组件中我们会这样做: <!...在其他情况下,我们可能想要从子元素中获取一个值到元素中,我们为此使用了函数。 例如,你可能正在这样做。函数接受子函数的值并对其进行处理: <!

7.6K20

Python-面向对象编程

,但无需知道方法内部的实现细节 如果要让内部属性不被外部访问,可以把属性的名称前加上两个下划线,在Python中,实例的变量名如果以开头,就变成了一个私有变量(private),只有内部可以访问,外部不能访问...不能直接访问name是因为Python解释器对外把name变量改成了_Human__name,所以,仍然可以通过_Huamnname来访问name变量 定义类方法: ?...上图为例,man继承 Human类 , Human类就是 man类的类, man类就是Human类的子类,继承可以把类的所有功能都直接拿过来,这样就不必重零做起,子类只需要新增自己特有的方法,也可以把类不适合的方法覆盖重写...多态 多态就是 子类继承类的方法,如果类的方法不满足 ,子类可以重新写方法 ,子类优先从子类查找方法执行。一句话:多态的前提是以继承和重写类方法: ?...在子类用 super() 访问类方法: ?

40810

JAVA面试必备知识(基础篇)

用户无需知道对象内部的细节,但可以通过对象对外提供的接口来访问该对象。...优点:减少耦合: 可以独立地开发、测试、优化、使用、理解和修改减轻维护的负担: 可以更容易被程序员理解,并且在调试的时候可以不影响其他模块有效地调节性能: 可以通过剖析确定哪些模块影响了系统的性能提高软件的可重用性降低了构建大型系统的风险...final 是一个修饰符,可以修饰变量、方法和类。如果 final 修饰变量,意味着该变量的值在初始化后不能被改变。...一个子类只能继承一个抽象类, 但能实现多个接口抽象类可以有构造方法, 接口没有构造方法抽象类可以有普通成员变量, 接口没有普通成员变量抽象类和接口都可有静态成员变量, 抽象类中静态成员变量访问类型任意,...调用super()必须写在子类构造方法的第一行, 否则编译不通过super从子类调用类构造, this在同一类中调用其他构造均需要放在第一行尽管可以用this调用一个构造器, 却不能调用2个this和

63430

JAVA知识基础(九):this、super 关键字总结

1.this关键字 this有三种常见用法 1.this调用本类中的属性,也就是类中的成员变量 2.this调用本类中的其他方法 3.this调用本类中的其他构造方法,调用时要放在构造方法的首行。...(用来访问直接类中被隐藏的类中成员数据或函数,基类与派生类中有相同成员定义时如:super.变量名 super.成员函数据名(实参) this:它代表当前对象名(在程序中易产生二义性之处,应使用this...来指明当前对象;如果函数的形参与类中的成员数据同名,这时需用this来指明成员变量名) 调用super()必须写在子类构造方法的第一行,否则编译不通过。...super()和this()类似,区别是,super()从子类中调用类的构造方法,this()在同一类内调用其它方法。 super()和this()均需放在构造方法内第一行。...包括:static变量,static方法,static语句块。 从本质上讲,this是一个指向本对象的指针, 然而super是一个Java关键字。

18240

ThreadLocal (下) 继承性

因为子线程thread里面调用get方法时当前线程为thread线程,而这里调用set方法设置的变量时main线程,两者是不同线程,自然子线程访问时放回null。...那么有没有办法让子线程能访问线程中的值,当然是有的哈哈哈! InheritableThreadLocal 为了解决上节提出的问题,InheritableThreadLocal应运而生。...InheritableThreadLocal继承自ThreadLocal,其提供了一个特性,就是让子线程可以访问线程中设置的本地变量。...下面我们看一下重写的代码 (1) 何时执行,以及如何让子线程可以访问线程的本地变量。这要从创建Thread的代码说去,打开Thread类的默认构造函数,代码如下。...可以看到现在可以从子线程正常获取到线程变量的值了。 那么在什么情况下需要子线程可以获取线程的threadLocal变量呢?

48610

Python学习笔记(15)- osos.path 操作文件

: ') count_size(path) os模块中关于文件/目录常用的函数使用方法 函数名 使用方法 getcwd() 返回当前工作目录 chdir(path) 改变工作目录 listdir(path...remove(path) 删除文件 rmdir(path) 删除单层目录,如该目录非空则抛出异常 removedirs(path) 递归删除目录从子目录目录逐层尝试删除,遇到目录非空则抛出异常...(file) 返回指定文件的尺寸,单位是字节 getatime(file) 返回指定文件最近的访问时间(浮点型秒数,可用time模块的gmtime()或localtime()函数换算) getctime...(file) 返回指定文件的创建时间(浮点型秒数,可用time模块的gmtime()或localtime()函数换算) getmtime(file) 返回指定文件最新的修改时间(浮点型秒数,可用time...模块的gmtime()或localtime()函数换算) 以下为函数返回 True 或 False exists(path) 判断指定路径(目录或文件)是否存在 isabs(path) 判断指定路径是否为绝对路径

1K60

ThreadLocal (下) 继承性问题解决,以及具体实现原理

因为子线程thread里面调用get方法时当前线程为thread线程,而这里调用set方法设置的变量时main线程,两者是不同线程,自然子线程访问时放回null。...那么有没有办法让子线程能访问线程中的值,当然是有的哈哈哈! InheritableThreadLocal 为了解决上节提出的问题,InheritableThreadLocal应运而生。...InheritableThreadLocal继承自ThreadLocal,其提供了一个特性,就是让子线程可以访问线程中设置的本地变量。...下面我们看一下重写的代码 (1) 何时执行,以及如何让子线程可以访问线程的本地变量。这要从创建Thread的代码说去,打开Thread类的默认构造函数,代码如下。...> threadLocal = new InheritableThreadLocal(); 运行结果如下: [image-20200408184018568.png] 可以看到现在可以从子线程正常获取到线程变量的值了

1.6K20

UML类图介绍

文章目录 UML类图 一、类图概述 二、类图的作用 三、类图表示法 1. 类的表示方式 2....,UML类图中表示访问修饰符的符号有三种: +:表示public -:表示private #:表示protected 对于缺省,什么符号都不加 属性的完整表示方式是: 访问修饰符 名称 :类型 [ =...上图表示每个顾客都有一个地址,这通过让Customer类持有一个类型为Address的成员变量实现。 2,双向关联 成员属性必须有所指向的类型 双向关联就是双方各自持有对方类型的成员变量。...下图所示是头和嘴的关系图: 2.4 依赖关系 在代码中,某个类的方法通过局部变量、方法的参数或者对静态方法的调用来访问另一个类(被依赖类)中的某些方法来完成一些职责。...下图所示是司机和汽车的关系图,司机驾驶汽车: 2.5 继承关系 是类与子类之间的关系。 在 UML 类图中,继承关系用带空心三角箭头的实线来表示,箭头从子类指向类。

41830

【设计模式】 面向对象六大设计原则

; 继承缺点 :  -- 侵入性 : 继承是侵入性的, 子类 强制继承 类的方法和属性; -- 灵活性 : 降低代码的灵活性, 子类必须拥有类的属性和方法, 子类收到了类的约束, 这是从子类的角度讲得...里氏替换注意点 避免子类个性 : 如果想要使用里氏替换, 尽量避免让子类拥有自己单独的成员变量 或者 方法, 如果子类个性多了, 子类类关系很难调和; -- 里氏替换缺点 : 将子类当做类用, 抹杀了子类的个性...; (2) 变量类型抽象 变量类型抽象 : 变量的表面类型尽量都定义成抽象类; -- 注意 : 不是绝对的, 一些工具类, 组件不必定义抽象; (3) 类派生控制 派生控制 : 任何类不能从具体类派生;...减少对外界交互; -- 具体方法 : 接口中尽量少公布public 方法, 对外公布的 public 方法越少, 变更的风险就越小, 有利于后期的维护; (3) 定制服务 定制服务 :  -- 起源 : 系统模块间的耦合需要有相互访问的接口..., 这里就需要为各个 客户端 的访问提供定制的服务接口; -- 要求 : 只提供访问者需要的方法, 不需要的就不提供; (4) 接口隔离限度 接口隔离局限性 :  -- 粒度小 : 接口粒度越小, 系统越灵活

39610

八、python学习笔记-面向对象-三大特性

面向对象三大特性之封装 # 封装,将多个类方法中调用的相同参数封装为类变量 class Bar: def __init__(self, n, a): self.name = n...然后再往右侧类寻找 当左侧和右侧的类拥有公共类时,公共类方法最后执行 self永远是执行该方法的调用者(类对象) 类方法中调用的方法,会从子类开始从新查找,并非直接执行类中的方法 """...,会从子类开始从新查找,并非直接执行类中的方法 class A5: def a(self): return '这是类' def b(self): return...(A7): def a(self): super(B7, self).a() x7 = B7() x7.a() 面向对象三大特性之多态 # 在变量赋值时可是时多种数据类型,Python...是原生多态 # Python变量赋值时不指定类型,可以是字符串,数字 # 函数参数arg可以是数字也可以是字符串 def func(arg): print(arg) func(1) func

20521

Vue数据单向流的深入理解

大家都知道在VuE组件中我们使用props来接受组件传入的值 这个值可是数字 布尔值 数组 对象,正如Vue官网所介绍,所有的prop都使其父子prop之间形成一个单向下行绑定, 即:级prop的更新会向下流动到子组件中...,但是反过来则不行,如果强行修改变量值,则会发出警告....这样会防止从子组件意外改变级组件的状态,从而导致你的应用的数据流难以理解....但这里的单向数据流却有一个限制, 就是所传的变量必须是基本数据类型,数字,布尔,字符串, 而数组和对象则是双向绑定,在子组件中修改了组件传进来的一个数组,同时会作用到组件上,从而影响组件的状态....官网也有类似的描述,如下: 注意在 JavaScript 中对象和数组是通过引用传入的,所以对于一个数组或对象类型的 prop 来说,在子组件中改变这个对象或数组本身将会影响到组件的状态。

29920

Java基础-封装、继承、多态

继承的缺点; 继承让类与类之间产生了关系,类的耦合性也增加了,当类发生变化时,子类也不得不跟着变化,削弱了子类的独立性; 2.3. 继承中变量访问规则 1. ...继承中构造方法的访问规则 子类中所有的构造方法默认都会访问类中的无参构造方法。 因为子类会继承类中的数据,所以子类初始化之前,需要对类进行初始化。...多态的访问特点 成员变量:编译看左边,执行看左边; 成员方法:编译看左边,执行看右边; 为什么成员变量和成员方法的访问不一样呢? 这是因为成员方法有重写,而成员变量是没有的。...向上转型,从子类到类,类引用指向子类对象,也是Java中默认的存在方式; 2. ...Dog dog1 = new Dog(); dog1.showDog(); // 我是小狗 // 多态中,编译阶段是看左边,执行是看右边,向上转型,从子

6500
领券