java基础:多态实现方式

java基础:多态实现方式
很多地方都写着多态三要素是: 继承、重写、向上转型。
所以继承实现多态我理解了,那么用接口实现多态的呢,它并不符合多态三要素。很困惑,希望大佬来解答一下!

0

2个回答

很多地方都写着多态三要素是: 继承、重写、向上转型。
这个写法根本就是错的

多态的意思就是一种概念,多种表现形式,这个才是多态。
java中体现多态的语法有:
函数重载,一个函数名,对应多种函数参数的调用
泛型,一种算法或者一种数据结构,对应多种具体类型
接口,一种接口,对应多个类实现
派生类的函数重写(很多培训机构将多态等同于派生类的重写,你看到的也不外乎这种谬论)

函数重载和函数重写,在早期的面向对象的语言上有相通的地方,比如说,C++语言,你定义一个成员函数,本质上是一个带有this指针的普通函数

class A
{
public:
void foo(int x) { ... }
};
其实foo就是
void foo(int x, A * this);
这样一个普通函数
而如果我们有一个派生类B
class B : public A
{
public:
void foo(int x) { ... }
}
等于我们又有了一个
void foo(int x, B * this);
那么显然,如果我们把这两个普通函数放在一起看,它相当于foo这个函数被重载了。

所以在非常早期的OOP教材里(上世纪90年代或者更早)方法重写和重载有时候混为一谈,或者并不单独提出来。

1
qq_33395725
qq_33395725 非常感谢,好多地方知其然而不止所以然。这个困惑解决了。
9 个月之前 回复

这个应该差不多,接口可以用范性 处理一下,

-1
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Java中三种多态实现方式
1.普通类  AnimalFu a =  new AnimalZi new(); 2.抽象类 animal  是父类抽象类 Animal a = new Cat(); 3.接口 // 学生是类  smoking  是接口  Smoking sk = new Student()  多态的特点: 变量:编译看父类 方法:运行看子类...
JAVA多态的实现方式
多态从实现的角度分为:静态多态和动态多态       静态多态也叫做编译时多态       动态多态也叫做运行时多态   1.静态的多态: 函数重载是静态的多态的一种实现形式: 举例说明: class MethodOverloading { viod receive(int i) { System.out.println("Received one
多态的基本知识<多态的前提是继承哟!!!!>
什么是多态、多态的前提是什么、多态访问成员的特点、多态的优缺点、如何改进多态的缺点了?
java中多态三种实现方式之一
1,用接口实现多态 [code=&quot;java&quot;][/code] package com.tarena.framework; import android.graphics.Canvas; import android.graphics.Paint; public interface BaseState { public void draw(Canvas canvas,Paint...
简述java中两种实现多态的方法
重载和覆盖 重载和覆盖 重载和覆盖
(JAVA基础)什么是多态?为什么要使用多态?
多态是为了是程序具有更好的扩展性,并可以对类进行通用的处理!那么这个是怎样体现的呢? 我们先看一段程序: package stduy; abstract class Animal{ abstract void eat(); } class Dog extends Animal{ public void eat() { System.out.println(&quot;啃骨头!&quot;); }...
java中实现多态的机制是什么,动态多态和静态多态的区别?(java基础一)
多态总结: 指向子类的父类引用由于向上转型了,它只能访问父类中拥有的方法和属性,而对于子类中存在而父类中不存在的方法,该引用是不能使用的,尽管是重载该方法。若子类重写了父类中的某些方法,在调用该些方法的时候,必定是使用子类中定义的这些方法(动态连接、动态调用)。 一、多态的实现 Java实现多态有三个必要条件:继承、重写、向上转型。 继承:在多态中必须存在有继承关系的子类和父类。 重写:子类...
java多态练习题
java多态、继承练习题,包含题目与答案,............................................................................................................
实现多态的三个必要条件
实现多态的三个必要条件 1.要有继承(实现implements) 2.要有重写(overWrite&amp;amp;overRide) 3.父类引用指向子类对象
通过多态生成对象和直接创建对象的区别
这是父接口,写了两个test方法。package com.wjc.Nio; /** * Created by wang.jiancheng on 2017/8/4. */ interface InterParent { public void test1(); public void test2(); }这是子类,实现了父接口的方法后自己也写了个test方法。 package
多态基础
class Human { public void work(){  System.out.println(&quot;人类直立行走。。。&quot;); }}class Man  extends Human{  public void work(){   System.out.println(&quot;男孩潇洒行走。。。&quot;);  }}public class Woman  extends Human{ public v...
java多态内存分析
      “  时针如果可以回头,熟悉那张脸,重温嬉戏这乐园,墙壁的松脱涂鸦已经褪色才明白存在的价值归于记忆。街角小店尚存在吗?这大时代会不会牵挂,过去现在花开怎么会等待。       但有种意外不管痛不痛都有伤害,光阴远远离开,那笑声徘徊与脑海。但这一秒可笑不再可爱,当天心跳不在。     时针如果可以暂停,能否去改变曾经演过的剧情,电影般改变的情节要删去的就随着岁月 消声 去迹。高贵的...
一个简单的多态小例子 初学者可以看看
package Bmap; //多态的好处:提高代码的扩展性,前期定义的代码可以使用后期的代码 //定义一个抽象父类 abstract class Animal { abstract void eat(); abstract void jiao(); } //定义一个猫类 class Cat extends Animal { void eat() { Sy
(java类,继承,多态练习)实现一个简易的租车系统
控制台测试: 欢迎使用租车系统 你是否要租车:1是 0否 1 您可租车的类型及其价目表 序号:1  汽车名称:奥迪A4 租金500/天 容量:最多载人4人  序号:2  汽车名称:马自达6 租金400/天 容量:最多载人4人  序号:3  汽车名称:皮卡雪6 租金450/天 容量:最多载人4人,最多载货2吨 序号:4  汽车名称:金龙 租金800/天 容量:最多载人20人  序号:5  汽车名称...
第三章 多态
1.什么是多态? 多态是具有表现多种形态的的能力特征。更专业的说法是:同一个实现接口使用不同的实例而执行不同的操作。 2.多态性与继承,方法重写密切相关。 3.子类到父类的转换  (向上转型) //  将int型常量或变量的值赋给double 型变量,可以自动进行类型转换 int  i =5; double  d1  =5; //  将double 型常量
java的多态及多态的三个必要条件
多态的要点: 1.多态是方法的多态,不是属性的多态(多态与属性无关) 2.多态存在要有3个必要条件:继承、方法重写、父类引用指向子类对象。 3.父类引用指向子类对象后,用该父类引用调用子类重写的方法,此时多态就出现了。 案例代码: package com.jackfujia.oo2; /**  * 测试多态  * @author Administrator  *  */ public c...
Java中抽象类实现多态
不能new出抽象类对象,但可以定义一个抽象类的引用。 可以把一个子类对象的地址赋给抽象类的引用,然后通过抽象类的引用调用子类从父类继承过来的方法,即抽象类也可以实现多态 假设A是抽象类,B是A的子类且完全实现了A的所有抽象方法,则 A aa = new A(); //error A aa = new B(); //OK abstract class A { public abstrac
多态例子——Java代码
/*多态的好处:提高了代码的维护性和扩展性;弊端:父类不能使用子类的特有功能。要用子类的特有功能,可以:A:创建子类对象,调用方法即可(不合理,太占内存);B:把父类的引用强制转换为子类的引用(向下转型);向上转型:Fu f = new Zi();向下转型:Zi z = (Zi) f;//要求该f必须是转换为Zi的。*/class Animal{ public void eat(){ Syste...
多种方法实现多态!!!
本博客解决 如下几个问题!!!第一:什么是多态? 第二:传统方法怎么实现多态? 第三:是否有新的方法实现多态?什么是多态? 多态:多态指同一个实体同时具有多种形式。它是面向对象程序设计(OOP)的一个重要特征(引自百度百科)。 通俗解释:就是同一种实体,按道理来说,仅仅能表明一种状态。但是通过技术手段,让其可以表示多种状态,这就是多态!!!举个栗子 【例子】 编程角度解释:一个接口,多种
Java技术——多态的实现原理
0.前言 多态在Java技术里有很重要的地位,在面试中也会经常被问到。 但是多态太抽象了,查了很多很多资料,连续几天断断续续的看,有时候看着看着就走神了。毕竟太抽象,哈哈~ 不过依然硬着头皮看下来了(也不知道看了多少遍),并且将很多资料里关于多态的知识进行了整理(添添加加删删减减了很久),便有了这篇文章。通过这篇文章相信可以帮助你更加深刻的理解多态。
抽象类实现Java 多态特性案例
package javarefence.ninth.introducingclasses.introducingmethods.charter870; abstract class Figure {               double dim1;     double dim2;          Figure(double a,double b){         dim1=a;    ...
java基础,封装,继承,多态,集合的综合案例
最近学习了java基础中的封装、继承、多态和集合,写了一个简单地案例。对于不太懂这方面的新手希望会有助于你们理解,如果是大神可以提出改进意见,谢谢。关于这方面的概念性的东西我也解释不好,所以就不多说了。 本案例没有用到和抽象类接口。简单介绍一下这个案例:《宠物商店》 功能,宠物商店可以进购宠物,可以出售宠物。宠物具有吃东西和玩耍的能力,宠物主人可以在...
一个经典的多态Demo
class Car{ static int num; int price; String name; Car(int price,String name){ this.price = price; this.name = name; } public String getName() { return name; } public int getPrice() {
Java多态(面试考点,不要因为基础而忽视)
面向对象的三大特性:继承封装,多态 从一定角度来看,封装和继承几乎都是为多态准备的 定义 指的是不同对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式 作用 消除类型之间的耦合关系 多态的好处 1)可替换性 2)可扩充性 3)接口性 4)灵活性 Java中多态的分类 分为方法的多态和类的多态 1)person为父类,student为子类,那么...
为什么使用多态?实现多态的有哪些方式?
实现多态的两种方式 一、什么是多态? 父类类型的变量指向子类创建的对象,使用该变量调用父类中一个被子类重写的方法,则父类中的方法呈现出不同的行为特征,这就是多态。 简单的来说编译时方法行为表现的是父类中的方法,运行时方法行为表现的是子类中重写该方法的行为特征 二、为什么使用多态? 1、实现代码的复用,避免代码的冗余; 2、...
多态与泛型
1.多态的理解和使用: 多态自我理解就是同种调用的不同结果表现 1) 方法的多态性:包括重载和重写(其实重写就是为了下面类之间继承的多态) 2)类之间继承的多态 重载和重写已经在之前的文章中学习过了,下面是类的多态: class animal{ public void eat(){ System.out.println("animal.eat()"); } } class cat
经典算法之冒泡排序(两种方式java 实现)
   1. 冒泡排序(含两种实现方式)基本思路:比较相邻两个元素的大小,将数值大的放在左边。跑第一趟  假如下标为0的元素比下标为1的元素的值要大,两元素进行交换,将大的交换到左边然后再用下标为1的与下标为2比较,就这样两相邻元素依次进行比较,将较大的放在左边。重复第一趟步骤直到排序完成。下面我们来模拟一下冒泡排序假设有数组{35,56,34,22,16}第一趟排序:             第一...
对Java中继承、多态与重写的关系理解 -----Jack
    小杰作为一个刚刚入门的萌新程序猿,刚刚结束为期三周的Java教学,因时间紧迫小杰
C++ 多态的实现原理分析
一、什么是多态 在面向对象开发中,多态是一个很重要的特性。 什么是多态呢?就是程序运行时,父类指针可以根据具体指向的子类对象,来执行不同的函数,表现为多态。   二、C++ 多态的实现原理 1. 实现原理 当类中存在虚函数时,编译器会在类中自动生成一个虚函数表 虚函数表是一个存储类成员函数指针的数据结构 虚函数表由编译器自动生成和维护 virtual 修饰的成员函数会被编译器放入...
JAVA编程基础——类和对象(单例模式、继承、多态)
目录 类和对象(单例模式、继承、多态) 一、单例模式 1、饿汉式单例模式 2、懒汉式单例模式 3、静态内部类实现单例模式 二、继承 注: 问题一:派生类继承了父类除构造方法外的所有属性。 问题二:super关键字: 问题三:派生类构造对象的初始化顺序? 问题四:基类数据成员在派生类当中的访问权限: 问题五:重载和重写(覆盖): 三、多态 JAVA实现多态有三个必要条件:...
java分享 一、论证重载是不是多态
最近看了一些书上讲的多态,发现相互之间是有冲突的,最主要的冲突是对重载是不是多态的观点,看过这些书以后,我有了自己的看法,特此写出来给大家分享:     一、首先我们看一下多态的定义:多态是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法或者属性调用在编程时不确定,而在运行期间才确定。     从定义来看,需要注意几点:         1)引用变量指向的具体类型在编程时不确
C++多态的实现方式总结
实现多态有两种方法: 1、覆盖 *********** 覆盖是指子类重新定义父类的虚函数的做法。 2、重载 *********** 重载是指允许存在多个同名函数,而这些函数的参数表不同(或许参数个数不同,或许参数类型不同,或许两者都不同)。 分析: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 重载是在同一个类中相同的返回类型和方法名,但是参数的
java之匿名内部类中的多态
接口,抽象类以匿名内部类实现多态
java利用多态实现接口
/* 分析:从具体到抽象 老师和学生都会抽烟, 具体:老师 年龄、睡觉、工作 学生 年龄、睡觉、工作 由于老师和学生都有共性提取出一个父类 人类:成员变量 年龄 成员方法 睡觉(公共方法) 工作(特有方法) 抽烟是个额外的功能,部分老师和学生可能会具有抽烟的属性,所以将其定义为接口 ...
设计模式之三:工厂方法模式—多态工厂的实现
简单工厂的严重问题: 当系统中需要引进新产品时,静态工厂方法通过所传入参数的不同来创建不同的产品,这必定要修改工厂类的源代码,违背了开闭原则 引入工厂方法模式: 针对不同的产品提供不同的工厂 定义: 定义一个用于创建对象的接口,让子类决定将 哪一个类实例化,工厂方法迷失让一个类实例化延迟到其子类,工厂方法模式又称为工厂模式(Factory Pattern),又课称作虚拟构造器
理解多态和RTTI
public class ChinesePerson implements Person { @Override public void say() { // TODO Auto-generated method stub System.out.println("i am chinese"); } }public class JapanPerson implements Per
JAVA多态及接口练习
要求:有三种交通工具飞机、轮船、汽车           它们有各自的行驶方式(水、路、空)           它们有各自的载人数量           它们有各自的行驶速度           只有轮船和汽车可以打开窗子           用多态和接口实现: public class text001 { public static void main(String[] arg...
JVM--深入剖析继承与多态实现原理(合集篇)
由于我将继承与多态的讲解分成了三篇博客,所以在这篇博客给出三篇博客总的链接,阅读顺序由第一篇至第三篇就可以。第一篇:主要讲解分派:JVM–详解虚拟机字节码执行引擎之静态链接、动态链接与分派第二篇:主要讲解invokevirtual指令:JVM–从JVM层面深入解析对象实例化、多态性实现机制 第三篇:主要讲解继承与方法表: JVM–再谈继承与多态相信这三篇博客会给你带来惊喜~~~
[java][24]多态形式3:父类作为方法返回值;instanceof关键字
java小白的学习记录......1. 本文将介绍1)多态形式3:父类作为方法返回值;2)instanceof关键字 -- 父类转换为子类(强制类型转换)2. 实例 ( 颜色对应以上2点 )继续利用上一篇博文 [java][23] 中的实例。1)父类Pet:public class Pet { public void eat(){ System.out.println(&quot;Pet is eatin...
C++多态的两种形式
1.多态的概念与分类 多态(Polymorphisn)是面向对象程序设计(OOP)的一个重要特征。多态字面意思为多种状态。在面向对象语言中,一个接口,多种实现即为多态。C++中的多态性具体体现在编译和运行两个阶段。编译时多态是静态多态,在编译时就可以确定接口使用的形式。运行时多态是动态多态,具体引用的接口在运行时才能确定。 静态多态和动态多态的区别其实只是在什么时候将函数实现和函数调用关联起来,是...