多态

多态的理解

北城以北 提交于 2019-12-05 15:31:47
多态很常识的理解就是向上转型,但是只记住这个概念会出错的,比如看下面的代码 // polymorphism/PrivateOverride.java // Trying to override a private method // {java polymorphism.PrivateOverride} package polymorphism; public class PrivateOverride { private void f() { System.out.println("private f()"); } public static void main(String[] args) { PrivateOverride po = new Derived(); po.f(); } } public Derived extends PrivateOverride { public void f() { System.out.println("public f()"); } } private f() 这里的private默认是final的,但是为什么你还能“重写”?因为你根本不是重写,你是在派生类扩展了一个方法,所以向上转型后只会调用基类的方法。 针对这种情况,我们比较推荐加上@Ovrride注解,因为这样可以在编译的时候就报错让我们发现。 error: method

三大特性-多态

…衆ロ難τιáo~ 提交于 2019-12-05 15:31:41
1 package Day3.Demo2; 2 3 /** 4 * 体现多态的写法,是下面的run方法,run方法在面向的是一个抽象的Car 5 * 在run方法看来,它只看Car,这个抽象的东西,具体是宝马,还是奔驰,run不关心 6 */ 7 public class App { 8 public static void main(String[] args) { 9 //多态:通俗理解,我要来个人(抽象)帮帮我 10 //多态:是对象多种表现形式的体现,同一个事件发生在不同的对象上会产生不同的结果 11 Car car1 = new Bmw(); 12 Car car2 = new Benz(); 13 //多态:就是同一个接口,使用不同的实例而执行不同操作 14 run(car1); 15 run(car2); 16 17 } 18 /** 19 * 马路在跑车 20 * @param car 21 */ 22 private static void run(Car car){ 23 System.out.println("马路在跑车"+car.getBrand()+"车"); 24 } 25 } 1 package Day3.Demo2; 2 3 public class Benz extends Car{ 4 public Benz(){ 5 super("奔驰",

极*Java速成教程 - (4)

别等时光非礼了梦想. 提交于 2019-12-05 13:52:46
Java语言基础 多态 多态是面向对象的一大重要特性,如果说封装是隐藏一个类怎么做,继承是确定一系列的类做什么,那多态就是通过手段去分离做什么和怎么做。 向上转型与收窄 在开发者将一类事物封装成类以后,他们的具体操作都被隐藏,而通过继承获得的“特化”的子类,满足了父类全部的性质,也就是说子类也是一种扩大的父类,子类比父类多了点东西。 那么以对父类的要求去要求子类,子类自然也全部符合要求,也就是说,可以用子类变量填充父类参数列表,用子类对象调用父类public方法,重写方法返回父类方法返回类的子类,这时候把子类的带有特性的东西丢出去一些就好,“给”的时候宜多不宜少。 我们不用关心操作的是子类还是父类,只要这个对象可以调用继承树根中的某一个类定义的方法就好。 向下转型与报错 如果把子类给了父类,就是多给了东西,Java编译器回把多余的丢掉,但是如果少给了东西,把父类给了子类,就会出现父类缺少子类特性的问题,就会不够用,就可能会报错。 绑定 将一个方法的调用和方法的主题关联起来叫做“ 绑定 ”,程序设计中,绑定分为两种,一种是当代码编译时就将方法调用和主体关联起来,叫做前期绑定,一种是运行起来以后才将方法调用和主体关联起来,叫做动态绑定。 动态绑定就像是有一个乐器演奏列表,列表中的每个乐器都要被演奏,对于程序来说,不知道下一个进来的是小提琴还是手风琴,但是只要是乐器(父类)

java.多态

浪子不回头ぞ 提交于 2019-12-05 12:34:25
概述 多态是继封装、继承之后,面向对象的第三大特性 生活中,比如跑的动作,猫、狗和大象,跑起来是不一样的。再比如飞行的动作,昆虫、鸟和飞机,飞起来也是不一样的。可见,同一类行为,通过不同的事物,可以体现出来不同的形态。多态描述的就是这样的状态。 定义 多态:是指同一行为,具有多个不同表现形式 1、继承或实现【二选一】 2、方法重写【意义体现:不重写,无意义】 3、弗雷引用指向子类对象【格式体现】 多态的体现 多态体现的格式: 父类类型 变量名 = new 子类对象; 变量名.方法名(); //父类类型:指子类对象继承的父类类型,或者实现的父接口类型 代码如下: Fu f = new Zi(); f.method(); 当使用多态方法调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,执行的是子类重写后方法 代码: 多态的好处 实际开发中,父类类型作为方法形式参数,传递子类对象给方法,进行方法的调用,更能体现多态的扩展性与便利。代码如下: 由于多态特性的支持,showAnimalEat方法的Animal类型,是Cat和Dog的父类类型,父类类型接收子类对象,当然可以把Cat对象和Dog对象,传递给方法。 当eat方法执行时,多态规定,执行的是子类重写的方法,那么效果自然与showCatEat,showDogEat方法一致

第二周总结

て烟熏妆下的殇ゞ 提交于 2019-12-05 12:10:35
一个周好快,转眼即逝,本周又有那么三四次想放弃的想法吧,好在自己都咬牙坚持了下来,希望可以这样一直坚持下去,好了下面总结一下这个周 学习内容 读完java编程思想第七章 复用类,这一章之前没有接触过的就是代理,和代理模式类似但却不是代理模式,严格来说是组合,其它的相对来说都比较简单。 读完java编程思想第八章 多态,这一章吧,关于域即成员变量这一块不能实现多态,之前没用过也没思考过,这一个算是学习到的一个点,然后就是继承的初始化顺序,需要注意基类构造方法在调用方法时不要调用非final和private的方法,否则多态情况下会出现未初始化的问题。 关于工作,配置配置文件中文,需要注意编码格式,我单独写过一篇博客。 反思总结 其实这么一看一个周也没做多少,但是我自己感觉比较满意吧,我希望现在的学习生活啥的,可以慢一点,以前有点太过于追求速度了,什么东西都想快速实现,往往结果是一事无成或者只会一点表面,所以往后我想慢一点扎实一点。 然后,希望自己可以多用一些时间来总结思考,我想这样应该会进步快一些吧,还有以前从来都不会去总结工作,也不去整理工作中的问题,所以希望从下个周开始,学着总结一下一个周的工作情况及所遇到的问题。 来源: https://www.cnblogs.com/chunyun/p/11924121.html

10.Dart中的抽象类 多态 以及接口

。_饼干妹妹 提交于 2019-12-05 12:05:24
一、Dart中的抽象类 Dart中抽象类: Dart抽象类主要用于定义标准,子类可以继承抽象类,也可以实现抽象类接口。 1、抽象类通过abstract 关键字来定义 2、Dart中的抽象方法不能用abstract声明,Dart中没有方法体的方法我们称为抽象方法。 3、如果子类继承抽象类,必须得实现里面的抽象方法 4、如果把抽象类当做接口实现的话必须得实现抽象类里面定义的所有属性和方法。 5、抽象类不能被实例化,只有继承它的子类可以 extends抽象类 和 implements的区别: 1、如果要复用抽象类里面的方法,并且要用抽象方法约束自类的话我们就用extends继承抽象类 2、如果只是把抽象类当做标准的话我们就用implements实现抽象类 案例:定义一个Animal 类要求它的子类必须包含eat、run方法 abstract class Animal{ eat(); //抽象方法 run(); //抽象方法 printInfo(){ print('我是一个抽象类里面的普通方法'); } } //继承的子类必须包含eat和run方法 class Dog extends Animal{ //鼠标放在Dog上,点击快速修复 @override eat() { print('小狗在吃骨头'); } @override run() { // TODO: implement run

类多态的向上转型,父类的方法被子类重写

无人久伴 提交于 2019-12-05 10:53:59
关于类多态向上转型的问题,比如父类的方法存在被子类重写的情况,比如下面一道有关于类多态向上转型的问题。 题目描述: 选项: 分析: 最为关键的一点 :(向上转型) (1)!如果存在父类与子类之间有方法的重写的情况,父类与子类之间的调用存在着一定的规则, 父类的权限 是:调用自身的和被子类重写过的方法,也就是说在调用自身的某个方法的时候,如果这个方法被子类重写过,那么在执行自身的这个函数之前会先执行子类中被重写过的这个方法。而子类的权限在这种情况限定下只能调用自身的这个方法。而不能再向上调用。 (2)调用的顺序是:(1)、(2)、(3)、(4)、(5)、(6)、(7) ; 得到的结果是:ABDC 来源: https://www.cnblogs.com/dashenaichicha/p/11921452.html

多态

依然范特西╮ 提交于 2019-12-05 07:51:40
抽象类 抽象:即不具体、或无法具体 例如:当我们声明一个几何图形类:圆、矩形、三角形类等,发现这些类都有共同特征:求面积、求周长、获取图形详细信息。那么这些共同特征应该抽取到一个公共父类中。但是这些方法在父类中又无法给出具体的实现,而是应该交给子类各自具体实现。那么父类在声明这些方法时,就只有方法签名,没有方法体,我们把没有方法体的方法称为抽象方法。Java语法规定,包含抽象方法的类必须是抽象类 语法格式 抽象方法 : 没有方法体的方法 抽象类:被abstract所修饰的类 抽象类的语法格式 1 【权限修饰符】 abstract class 类名{ 2 3 } 4 【权限修饰符】 abstract class 类名 extends 父类{ 5 6 } 抽象方法的语法格式 1 【其他修饰符】 abstract 返回值类型 方法名(【形参列表】); 抽象方法没有方法体 注意事项 1、抽象类不能创建对象,如果创建,编译无法通过而报错。只能创建其非抽象子类的对象 假设创建了抽象类的对象,调用抽象的方法,而抽象方法没有具体的方法体,没有意义 2、抽象类中,也有构造方法,是供子类创建对象时,初始化父类成员变量使用的 子类的构造方法中,有默认的super()或手动的super(实参列表),需要访问父类构造方法 3、抽象类中,不一定包含抽象方法,但是有抽象方法的类必定是抽象类

对象多态性

五迷三道 提交于 2019-12-05 06:46:21
对象多态性严格来讲现在只能为其讲解基本概念,以及相关使用限制 多态性依赖:方法的覆写 以下的内容只是为了解释多态性的特点,代码本身并没有意义 观察如下程序 class A{ public void print(){ System.out.println("A.public void print()"); } } class B extends A{ public void print(){ System.out.println("B.public void print()"); } } public class testDemo{ public static void main(String args[]){ B b = new B(); b.print(); } } 多态性严格来讲有两种描述形式 1.方法的多态性 |-方法的重载:同一个方法名称,根据传入参数的类型及个数不同执行不同的方法体 |-方法的覆写:同一个方法,会根据子类的不同,实现不同的功能 2.对象的多态性:指的是发生在继承关系类之中,子类和父类之间的转换问题 |-向上转型(自动完成):父类 父类对象=子类实例 |-向下转型(强制完成):子类 子类对象=(子类)父类实例 向上转型 class A{ public void print(){ System.out.println("A.public void print(