Java多态的概念和特点是什么

Java多态的概念和特点是什么

一、多态概念

继承关系使一个子类能继承父类的特征,并且附加一些新特征。子类是它的父类的特殊化,每个子类的实例都是其父类的实例,但是反过来不成立。例如:每个圆都是一个几何对象,但并非每个几何对象都是圆。因此,总可以将子类的实例传给需要父类型的参数。参考案例如下:

public class PolymorphismDemo{/** Main method */public static void main(String[] args){  displayObject(new Circle(1,"red",false));  displayObject(new Rectangle(1,1,"black",true));} public static void displayObject(GeometriicObject object){  System.out.println("Created on "+ object.getDateCreated()+".Color is"+object.getColor());}}

Created on Mon Mar 09 19:25:20 EDT 2011.Color is red

Created on Mon Mar 09 19:25:20 EDT 2011.Color is black

方法displayObject具有GeometriicObject类型的参数。可以通过传递任何一个GeometriicObject的实例来调用displayObject。使用父类对象的地方都可以使用子类的对象。这就是通常说的多态。简单来说,多态意味着父类型的变量可以引用子类型的对象

二、多态的特点

多态的前提:继承(即必须有子父类关系。)在使用多态后的父类引用变量调用方法时,会 调用子类重写后的方法。 定义格式:父类类型 变量名=new 子类类型(); 父类引用指向子类对象,如:Animal a = new Cat(); 多态中,编译看左边,运行看右边

三、instanceof操作符

instanceof是Java的关键字。Java关键字中的每个字母都是小写的。

为了更好地理解类型转换,可以认为它们类似于动物、北极熊、熊猫之间的关系,其中动物类Animal是北极熊类Polar bear和熊猫类Panda类的父类。北极熊是动物,所以,总是可以将 Polar bear的实例安全地赋值给Animal变量。该关键字用法是判断某个对象是否属于某种数据类型,返回值为布尔类型。

         Fu Zz=new Xu();        Fu Zzz=new yiting();        if(f1 instanceof Xu){            System.out.println("Zz是Xu的类型");        }        else{            System.out.println("Zzz是yiting的类型");        }

四、多态的转型

1、向上转型

总是可以将一个子类的实例转换为一个父类的变量,称为向上转换,因为子类的实例总是它的父类的实例。

作用:

减少一些重复的代码对象实例化的时候可以根据不同需求实例化不同的对象

package project2;	class Animal{		int num=100;		void say(){			System.out.println("It's an Animal.");		}	} 	class Cat extends Animal{		int num=50;		void say(){			System.out.println("It's a Cat.");		}			void bark(){			System.out.println("喵喵喵!");		}	} 	public class project2{		public static void main(String[] args) {			Animal cat=new Cat();//向上转型				System.out.println(cat.num);			cat.say();//			cat.bark();		}	}

运行结果:

100
It’s a Cat.

向上转型不要强制转型,父类引用指向的或者调用的方法是子类的方法,这个叫动态绑定。向上转型后父类引用不能调用子类自己的方法。

2、向下转型

把一个父类的实例转换为它的子类变量。必须使用转换标记(子类名)进行显示转换,向编译器表明你的意图。为使转换成功,必须确保要转换的对象是子类的一个实例。

作用:

向上转型时 ,会遗失子类对象独有的其他方法;可以通过向下转型再重新转回。

package project2;class Animal{	int num=100;	void say(){		System.out.println("It's an Animal.");	}} class Cat extends Animal{	int num=50;	void say(){		System.out.println("It's a Cat.");	}		void bark(){		System.out.println("喵喵喵!");	}} public class project2{	public static void main(String[] args) {		Animal cat=new Cat();//向上转型		Cat cat2=(Cat) cat;//向下转型		System.out.println(cat2.num);		cat2.say();		cat2.bark();	}}

运行结果:

50
It’s a Cat.
喵喵喵!

五、方法重写

提示:要重写一个方法,需要在子类中使用和父类一样的签名来对该方法进行定义。

子类从父类中继承方法。有时,子类需要修改父类中定义的方法的实现,这称为方法重写。

以下几点值得注意:

重写的方法必须与被重写的方法具有一样的签名,以及一样或者兼容的返回类型。兼容的含义是重写方法的返回类型可以是被重写方法的返回类型的子类型。仅当实例方法可访问时,它才能被重写。如果子类中定义的方法在父类中是私有的,那么这两个方法完全没有关系。与实例方法一样,静态方法也能被继承。但是,静态方法不能被重写。如果父类定义的静态方法在子类中被重新定义,那么在父类中定义的静态方法将被隐藏。可以使用语法“父类名.静态方法名”调用隐藏的静态方法。防止继承和重写

一个被final修饰的类和方法都不能被继承。被final修饰的数据域是一个常数。

有时候,可能希望防止类被继承。在这种情况下,使用final修饰符表明一个类是最终类,是不能作为父类的。Math类就是一个最终类。String、StringBuilder和StringBuffer类以及所有基本数据类型的包装类也都是最终类。例如,如下类A 就是最终类,不能被继承:

public final class A{  //Data fields,constructors, and methods omitted}

也可以定义一个方法为最终,最终方法不能被它的子类重写。例如如下,不能被重写:

public class Test {  //Data fields,constructors, and methods omitted   public final void m() {    // Do something }}

注:修饰符public、protected、private、static、abstract以及final可以用在类和类的成员上,只有final修饰符还可以用在方法中的局部变量上。方法内的final局部变量就是常量。

以上就是关于“Java多态的概念和特点是什么”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注亿速云行业资讯频道。

文章标题:Java多态的概念和特点是什么,发布者:亿速云,转载请注明出处:https://worktile.com/kb/p/22356

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
亿速云的头像亿速云认证作者
上一篇 2022年9月1日 下午11:24
下一篇 2022年9月1日 下午11:25

相关推荐

  • Java如何判断两个Long对象是否相等

    抛出问题: Long a = 4l;Long b = 4l;a == b //true Long a = 128l;Long b = 128l;a == b //false 如果Long的值在[-127,128]之间,用“==”判断是否相等是没问题的,如果不在这个区间,是不能用“==”的,原因如下源…

    2022年8月27日
    1.2K00
  • ae预合成快捷键是什么

    ae预合成快捷键: 答:ae预合成快捷键为:ctrl+shift+c。 当用户需要将两个素菜合成一个的时候,需要选这两个,然后直接合成。 ae预合成快捷键操作方法: 1、首先使用快捷键“ctrl+左键”来选择你要合成的素材,然后右击选“预合成”。 2、进入合成界面之后,可以为其创建一个名称。 3、搞…

    2022年8月29日
    3.2K00
  • roaming文件夹有什么作用

    roaming文件夹是用于存放一些程序运行后产生的数据文件的;该文件夹是Windows存放一些使用程序后产生的数据文件,如软件听音乐,登入的号码等而缓存的一些数据,若删除该文件夹不会对系统产生什么影响,但是会对软件造成一定的影响,建议不要删除。 本教程操作环境:windows10系统、DELL G3…

    2022年9月8日
    1.7K00
  • QT如何实现将两个时间相加

    标志位 首先介绍实现的这两个函数:void setTreatmentEndtime();//系统时间+我设定的时间=总的需要时间void setRinseTimeStartAndEnd(QString Val);//将分钟转换为标准时分格式,在相加 需要设置的标志位: //mainwindow.hp…

    2022年9月6日
    59400
  • windows com surrogate进程表示的是什么意思

    “com surrogate”是“C:WindowsSystem32dllhost.exe”的进程;出现该进程通常是“COM+”组件停止工作,这个进程占用高甚至直接未响应,这是由于电脑在加载文件图标的时候出现问题,导致电脑变的卡顿,可以在计算机属性设置中解决卡顿问题。 本教程操作环境:windows…

    2022年9月15日
    2.6K00
  • program files可不可以删除

    “program files”不可以删除;“program files”文件夹是windows系统的程序文件夹,在系统安装完成后就已经生成,该文件夹用于存放已经安装的应用程序,位于C盘根目录,如果删除可能会导致系统运行的不稳定,导致操作系统的崩溃。 本教程操作环境:windows10系统、DELL …

    2022年9月10日
    1.3K00
  • 如何让mysql不区分大小写

    让mysql不区分大小写的方法:1、进入mysql的安装目录,找到并打开配置文件“my.ini”;2、在配置文件的最后一行加上“lower_case_table_names=1”语句,设置大小写敏感参数“lower_case_table_names”,让mysql对大小写不敏感;3、重启mysql服…

    2022年9月24日
    3.3K00
  • frida如何抓apk网络包

    一 . 埋头分析踩坑路 从系统的角度去寻找hook点,而不是为了抓包而抓包。 1.okhttp调用流程 public static final MediaType JSON= MediaType.get(“application/json; charset=utf-8”);OkHttpClient …

    2022年9月8日
    1.4K00
  • Android开发怎么自定义实时图表控件

    今天分享文章“Android开发怎么自定义实时图表控件”,主要从:演示、环境、实现、第十一步:绘制等几个方面为大家介绍,希望能帮到您。 演示 环境 开发工具:Android Studio 开发语言:Kotlin 实现 名列前茅步:新建项目RealTimeChartDemo 第二步:新建RealTim…

    2022年6月29日
    52600
  • mysql的10061错误表示什么

    在mysql中,10061错误指的是连接本地服务失败;该错误出现的原因是在连接时因为配置文件或者是localhost只想的不是本地ip,才会导致连接本地服务失败的情况,可以将“localhost”的值修改为指定值来解决该错误。 千万级数据并发如何处理?进入学习 本教程操作环境:windows10系统…

    2022年8月31日
    1.1K00
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部