-
2021-03-06 22:05:36
相信很多学习java的人对于java多态是非常了解的,它的知识点也是非常重要的。今天就来为大家介绍一下,java多态是什么意思?并且用实例分享出来,一起来了解一下吧。
首先,多态指同一个实体同时具有多种形式。它是面向对象程序设计(OOP)的一个重要特征。如果一个语言只支持类而不支持多态,只能说明它是基于对象的,而不是面向对象的。
另外,多态是出现在具有继承关系的两个类的对象之间,所以它不像方法重载(发生在一个类中)在编译期间发生(也就是确定下来),而是在运行期间发生(确定下来)。
1.一个父类类型的引用可以指向他任何一个子类的对象
2.[相同]类域的[不同]对象执行[同一]方法的时候会有[不同]的表现
有一个比较经典的多态实例:
有一个Animal类,它有Cat,和Dog两个子类,在Animal中有个say方法,当Cat调用这个方法的时候输出的是“小猫喵喵喵”,当Dog调用这个方法时,输出的是“小狗汪汪汪”,这就是Java多态的实现。
这里我们写另外一个:
—父类:Person.java,代码如下所示:import java.util.Scanner;
public class Person
{
public int salary;
public int allSalary()
{
return 0;
}
public static void main(String[] args)
{
Person p = null;
for (int n = 0; n
{
@SuppressWarnings("resource")
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个1-3的数字:\n1 is Teacher\n2 is Scientis\n3 is Waiter");
int i = sc.nextInt();
//分别指向了不同的子类,输出的结果是不一样的
if (i == 1)
{
p = new Teacher(5000);
System.out.println(p.allSalary());
}
else if (i == 2)
{
p = new Scientist(5000);
System.out.println(p.allSalary());
}
else if (i == 3)
{
p = new Waiter(5000);
System.out.println(p.allSalary());
}
else
{
System.out.println("?\n请输入1-3");
}
}
}
}
—子类:Scientist .java,代码如下所示:public class Scientist extends Person
{
public Scientist(int salary)
{
this.salary = salary;
}
public int allSalary()
{
int aa = salary * 12 + 36500;
System.out.print("五五开一年的工资:");
return aa;
}
}
Waiter.java,代码如下所示:public class Waiter extends Person
{
public Waiter(int salary)
{
this.salary = salary;
}
public int allSalary()
{
int aa = salary * 12;
System.out.print("服务员一年的工资:");
return aa;
}
}
Teacher .java,代码如下所示:public class Teacher extends Person
{
public Teacher(int salary)
{
this.salary = salary;
}
public int allSalary()
{
int aa = salary * 12 + 3650;
System.out.print("教师一年的工资:");
return aa;
}
}
以上就是关于java多态是什么意思的主要内容了。并且用实际的代码为大家展示出来了。如果你对java知识感兴趣,想要了解更多java实例,敬请关注奇Q工具网。
推荐阅读:
更多相关内容 -
java继承多态是什么意思?java封装继承多态的例子
2021-03-05 22:28:02封装继承多态一直以来是java的最基本功能,起着不可缺少的作用,小伙伴们知道该如何封装继承多态吗?在以下文章中,小编将会用几个例子,为你解答疑惑。-----------------封装--------------1、什么叫类拥有相同属性...封装继承多态一直以来是java的最基本功能,起着不可缺少的作用,小伙伴们知道该如何封装继承多态吗?在以下文章中,小编将会用几个例子,为你解答疑惑。
-----------------封装--------------
1、什么叫类
拥有相同属性和方法的很多很多的对象的集合,叫做类public class 类名
{
属性
方法
}
2、什么叫对象
实实在在存在的事物就叫做的对象
3、方法
一般方法分为两部分,方法原型和方法实现public void run()
{ //方法原型
System.out.println("我在跑步!"); //方法实现
}
关于方法原型:public 返回类型 方法名(参数列表)
4、属性
属性最大的问题的是,不能对赋值进行判断,所以需要封装
5、封装的好处
(1)对象的属性和方法是一个整体,不可分割
(2)保证数据安全性
(3)保证数据有效性 在方法加条件判断
6、如何进行封装:
属性的封装
1、将所有的属性加上private
2、为属性加上get/set方法
3、用set/get方法进行赋值取值
方法的封装
1、把方法名前面的public改为private
2、私有方法一定要在公共方法里面去调用
一般所有的属性都要私有,但是方法根据需要来私有
-------继承-------------
1、什么是继承?
子类继承父类,然后子类能自动拥有父类的一些属性和方法,这就是继承
2、为什么要用继承?
为了简化代码,所以我们需要用继承。相同的功能交给父类去实现,然后子类继承父类后能自动拥有这些功能,并实现功能扩展、多态
3、继承的语法?public class 子类 extends 父类
{}
public class 大学生
{
String name;
int age;
char sex;
public void 读书()
{}
}
public class 中学生
{
String name;
int age;
char sex;
public void 读书()
{}
}
public class 小学生
{
String name;
int age;
char sex;
public void 读书()
{}
}
学生中一种 is-a
把相同属性和方法放在父类中定义,然后让各个子类继承父类public class 学生
{
String name;
int age;
char sex;
public void 读书()
{}
}
public class 大学生 extends 学生
{
public void 读恋爱()
{}
}
public class 中学生 extends 学生
{
public void 上网()
{}
}
public class 小学生 extends 学生
{
public void 撒娇()
{}
}
四、子类能继承到什么?
父类的私有成员和方法;父类的构造;
除了这两个无法继承,其他都可以
五、哪些类可以继承
凡是满足“is-a”(xx是一种xx)关系的,都可以继承。
六、单继承和单方向
单方向:子类能继承父类,但父类不可以继承子类
单继承:一个子类只能有一个直接父类
七、Object
所有类的祖宗类
八、继承的原理
new 一个子类对象出来的时候,先造出父类对象,然后再生子类对象
儿子没有东西就会找父亲拿
九、super
创建子类时,会自动先调用父类的构造。子类调用父类构造使用关键字super。比如class A
{
public A()
{
System.out.println("A出生了");
}
}
class B extends A
{
public B()
{
super(); //这句代码就算不写,系统也会自动帮我们添上。一定保证先运行A的构造,再来运行B的构造
System.out.println("B出生了");
}
}
但如果我们在A里面自己写了个带参构造,那么无参的构造会自动消失。这时候请记得去子类修改构造class A
{
//自己写了个带参构造,那么不带参数的构造会自动消失
public A(int a)
{
System.out.println("A出生了");
}
}
class B extends A
{
public B(int a)
{
super(a); //为了避免子类构造报错,请自己手动调用带参的父类构造
System.out.println("B出生了");
}
}
自己调自己的构造用this()
子类调父类的构造用super()
--------------------------多态--------------------------------------
1、两种多态
方法重载:静态多态。方法相同,由于参数不同,产生不同的结果。
方法重写:动态多态。方法相同,由于执行不同,产生不同的结果。
重载,是同一个类调用的相同方法,根据不同条件产生出的不同结果;比如同一个厨师做饭,给的原材料不一样,能做出不一样的菜肴
重写,是不同类调用的相同方法,根据调用人的不同产生不不同结果;比如一家三兄弟都去洗衣服,有的可能手洗有的可能机洗
2、重写
同一个动作(方法名相同,参数相同,返回值类型相同)由不同的对象来做,结果不同
伏明霞.跳水(); //拿了世界冠军
青蛙.跳水(); //潜水
小猪.跳水(); //死了
大学生.消费(100);//买玫瑰送女友
小学生.消费(100);//存起来
中学生.消费(100);//上网,买东西吃
3、实现动态多态的步骤
得有继承
有方法的重写
有父类的引用指向子类对象
4、多态的实现:public class 父类
{
String name = "张三";
public void 睡觉()
{
System.out.println("父亲睡是躺着睡的");
}
public void 走路()
{}
}
public class 子类 extends 父类
{
String name = "李四";
int age = 10;
public void 睡觉()
{
System.out.println("儿子睡是侧着睡的");
}
public void 上网()
{}
}
a、属性无多态父类 father = new 子类();
System.out.println(father.name); //张三
b、方法有多态父类 father = new 子类();
father.睡觉(); //儿子睡是侧着睡的
c.子转父类,父类相同的方法会被子类覆盖,子类独有的方法会被隐藏父类 father = new 子类();
father.走路();
father.睡觉();
father.上网(); //错误 儿子转为父亲,儿子独有的属性或方法会被隐藏
System.out.println(father.name);
System.out.println(fahter.age); //错误
子类 son = (子类) father; //父转为子,儿子独有的属性或方法会恢复
son.上网();
System.out.println(son.age);
以上就是今天的全部内容了,相信你一定大有收获吧。如果还想了解更多java入门知识,就请持续关注奇Q工具网吧。
推荐阅读:
-
java中多态是什么意思?
2021-02-12 08:56:07展开全部多态(Polymorphism)按字面的意思就是“多种状态”。在面向对象语言中,接口的多种不同的实32313133353236313431303231363533e58685e5aeb931333366306538现方式即为多态。引用Charlie Calverts对多态的描述...展开全部
多态(Polymorphism)按字面的意思就是“多种状态”。在面向对象语言中,接口的多种不同的实32313133353236313431303231363533e58685e5aeb931333366306538现方式即为多态。引用Charlie Calverts对多态的描述——多态性是允许你将父对象设置成为一个或更多的他的子对象相等的技术,赋值之后,
父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作(摘自“Delphi4 编程技术内幕”)。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。多态性在Object Pascal和C++中都是通过虚函数实现的。
多态指同一个实体同时具有多种形式。它是面向对象程序设计(OOP)的一个重要特征。如果一个语言只支持类而不支持多态,只能说明它是基于对象的,而不是面向对象的。C++中的多态性具体体现在运行和编译两个方面。
运行时多态是动态多态,其具体引用的对象在运行时才能确定。编译时多态是静态多态,在编译时就可以确定对象使用的形式。
多态:同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。在运行时,可以通过指向基类的指针,来调用实现派生类中的方法。
C++中,实现多态有以下方法:虚函数,抽象类,覆盖,模板(重载和多态无关)。
OC中的多态:不同对象对同一消息的不同响应.子类可以重写父类的方法
多态就是允许方法重名 参数或返回值可以是父类型传入或返回。
扩展资料:
把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。
赋值之后,父类型的引用就可以根据当前赋值给它的子对象的特性以不同的方式运作。也就是说,父亲的行为像儿子,而不是儿子的行为像父亲。
比如从某个基类派生出多个子类,其基类有一个虚方法Tdoit,然后其子类也有这个方法,但行为不同,然后这些子类对象中的任何一个可以赋给其基类对象的引用,或者说将子对象地址赋给基类指针,这样其基类的对象就可以执行不同的操作了。
实际上你是在通过其基类的引用来访问其子类对象的,你要做的就是一个赋值操作。
使用继承性的结果就是当创建了一个类的家族,在认识这个类的家族时,就是把子类的对象当作基类的对象,这种认识又叫作upcasting(向上转型)。这样认识的重要性在于:我们可以只针对基类写出一段程序,但它可以适应于这个类的家族,
因为编译器会自动找出合适的对象来执行操作。这种现象又称为多态性。而实现多态性的手段又叫称动态绑定(dynamic binding)。
-
多态是什么意思
2018-04-13 10:58:25多态是什么意思?5 java中的多态是什么意思? 豹子头09| 浏览 4739 次|举报 我有更好的答案 推荐于2017-11-28 16:32:45最佳答案 比方一下: 你和你朋友都是烟鬼, 某日,你没有带烟, 而你朋友有n种...多态是什么意思?5
java中的多态是什么意思?我有更好的答案推荐于2017-11-28 16:32:45 最佳答案比方一下: 你和你朋友都是烟鬼, 某日,你没有带烟, 而你朋友有n种烟, 你说: 来根烟, 朋友给你一根; 你通过烟的过滤嘴, 品出为白沙烟 你再要一根, 品出这次是芙蓉王, 再要一根, 品出这次是熊猫 ... 上面描述的就是多态! 烟 a = 白沙 烟 b = 芙蓉王 烟 c = 熊猫 但发现没有, 仅仅通过"烟"基类, 引用到不同的具体类对象, 就能让你调用到不同的对象, 这就是多态. 而烟到你嘴里[此时你还没有发现是那种烟], 你仅仅凭借"吸"的动作,就识别出来,到底是哪种烟对象 这就是多态的悬机. 多态须具备: 1. 基类 和各个子类 2. 基类 引用, 指向实例化的子类对象. 再举一个鸡的例子, 鸡是所有其它鸡的基类, 定义了一个方法shape(), 此方法能指明鸡的形态. 所有的子类[火鸡,山鸡,田鸡等],都有这个shape方法, 表明自己的形态, 如果用下面的方法定义我需要具体的鸡, [基类 引用 = 实现类的对象] for example: 鸡 a = new 火鸡(); 鸡 a = new 田鸡(); 鸡 a = new 山鸡(); 鸡 a = new 母鸡(); 当我使用的时候, 我采用 a 这个引用, a.shape(), 就会得到鸡的形态. 如果我定义的是 鸡 a = new 火鸡(); 那么a.shape得到的是火鸡的形态, 而不需要用具体的 火鸡 a = new 火鸡(); 再通过a.shape得到火鸡的形态
-
Python中的多态是什么
2021-02-03 13:00:33多态的概念其实不难理解,它是指对不同类型的变量进行相同的操作,它会根据对象(或类)类型的不同而表现出不同的行为。事实上,我们经常用到多态的性质,比如:>>>1 23>>>'a' 'b''ab'可以看到,... -
Java多态是什么
2021-08-06 11:52:53什么是多态呢? 1.定义: 多态:指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用)。 通俗一点的说法:所谓多态就是指程序中定义的引用变量... -
什么是多态?
2021-07-10 07:14:36多态确切的含义是:同一类的对象收到相同消息时,会得到不同的结果。而这个消息是不可预测的。多态,顾名思义,就是多种状态,也就是多种结果。 多态性是一种通过多种状态或阶段描述相同对象的编程方式。它的真正... -
什么是多态
2021-02-09 16:11:26文字是复制的百度的,代码是自己敲的,便于理解。...多态(Polymorphism)按字面的意思就是“多种状态”。在面向对象语言中,接口的多种不同的实现方式即为多态。引用Charlie Calverts对多态的描述 -
Java中的多态:什么是多态?
2022-05-27 21:09:43Java中的多态:什么是多态? 多态性是面向对象编程的三大重要特征之一,它是指在父类中定义的属性和方法被子类继承之后,可以具有不同的数据类型或表现出不同的行为,这使得同一个属性或方法在父类及其各个子类中... -
什么是多态,Python多态及用法详解
2022-03-31 12:14:40什么是多态,Python多态及用法详解 在面向对象程序设计中,除了封装和继承特性外,多态也是一个非常重要的特性,本节就带领大家详细了解什么是多态。 我们都知道,Python 是弱类型语言,其最明显的特征是在使用变量... -
多态是什么意思?
2014-11-13 11:56:00比方一下:你和你朋友都是烟鬼,某日,...烟 a = 白沙烟 b = 芙蓉王烟 c = 熊猫但发现没有, 仅仅通过"烟"基类, 引用到不同的具体类对象,就能让你调用到不同的对象, 这就是多态.而烟到你嘴里[此时你还没有发现是那种烟]... -
什么是编译时多态?什么是运行时多态?
2021-11-10 19:31:19什么是编译时 只是单纯的将代码翻译成一种中间语言(例如...什么是Java编译时多态 通过编译即可明确是哪一个多态方法的调用 比如说Java的重载,只通过参数的数量和类型不同来实现多态,那么在编译时我们可以单纯根据 -
python中的多态是什么_Python中的多态
2020-07-29 13:36:05python中的多态是什么 Python中的多态 (Polymorphism in Python) Polymorphism is a concept of Object Oriented Programming, which means multiple forms or more than one form. Polymorphism enables using a ... -
JAVA 什么是多态?
2019-05-16 17:53:28面向对象编程有三大特性:封装、继承、多态。 封装隐藏了类的内部实现机制,可以在不影响使用的情况下...那么,什么是多态呢? 1.定义: 多态:指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象... -
什么是多态?
2018-05-30 16:57:50核心:1、多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编译时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底... -
Python中的多态和多态性指的是什么?
2020-12-03 15:17:19面向对象编程中的四大特征分别是:抽象、封装、继承和多态。多态根据上下文,对象可以采用多种形式。程序将确定该对象每次执行所需的含义或用法,从而减少了重复代码。我国有句俗语:“龙生九子,各有不同”。这就是... -
什么是多态?为什么要使用多态?什么时候用多态?多态是如何实现的?使用多态有什么好处?
2019-02-15 11:01:41在学习《大话设计模式》的时候经常会遇到多态,但什么是多态?为什么要使用多态?什么时候用多塔?多态是如何实现的?使用多态有什么好处?我们将根据以上五个问题展开激烈的讨论。 什么是多态? 多态,... -
Java中的多态是什么?
2021-03-12 20:06:08运行时类型,由实际赋值给变量的对象的类型决定,当一个变量的两个类型不一致,就会出现多态。//BaseClass是SubClass的父类BaseClass a = new BaseClass();BaseClass b = new SubClass();//变量a调用baseMethod()... -
F-Bounded 有界多态是什么意思。[x[x]]
2021-03-14 11:29:43根据我的理解,有界多态是保证了子类的使用安全,不会返回同一个父类下的不同子类。 Sample代码如下: abstract class QueryPlan[PlanType <: QueryPlan[PlanType]] extends TreeNode[PlanType] {} 这是... -
【重学面向对象】篇一:到底什么是多态?
2021-02-04 15:23:26但是到底什么是多态,它的底层又是如何实现的,又有什么优缺点,可能就没那么容易说清楚 今天我们从它的近亲 C++ 语言来重新审视下,到底什么是多态 下面,正文开始! 什么是多态 多态(Polymorphism)是面向对象的... -
三分钟明白什么是java的多态
2020-07-14 11:30:25多态可以让我们不用关心某个对象到底是什么具体类型,就可以使用该对象的某些方法,从而实现更加 灵活的编程,提高系统的可扩展性。 允许不同类的对象对同一消息做出响应。即同一消息可以根据发 -
多态是什么
2021-01-17 12:23:54多态(Polymorphism)按字面的意思就是“多bai种状态”。在面向对象语言中,接口的多种不同的实现方式即为多态。引用Charlie Calverts对多态的描述——多态性是允许你将父对象设置成为和一个或更多的他的子对象相等... -
什么是多态?为什么用多态?有什么好处?多态在什么地方用?
2019-05-20 23:38:57什么是多态? 概念:同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性。简单的说:就是用基类的引用指向子类的对象。 为什么要用多态呢? 原因:我们知道,封装可以隐藏实现细节... -
什么是多态 ?多态具体体现在哪些?
2021-08-11 18:42:54文章目录一、什么是多态?主要体现在哪里?二、简单举例演示 本文介绍面向对象的多态。 一、什么是多态?主要体现在哪里? 多态:就是类的方法或者对象具有多种状态,是OOP的第三大有太特征,是建立在封装和... -
【Java面向对象】什么是多态?
2022-04-13 15:12:51多态: 动态编译:类型:可扩展性 既同一方法可以根据发送对象的不同而采用多种不同的行为方式。 一个对象的实际类型是确定的,但可以指向对象的引用的类型有很多(父类,有关系的类) 多态存在的条件 有继承...