java-多态

java-多态

Java 多态


多态是同一个行为具有多个不同表现形式或形态的能力。

多态就是同一个接口,使用不同的实例而执行不同操作,如图所示:

 

java-多态

多态性是对象多种表现形式的体现。

现实中,比如我们按下 F1 键这个动作:

  • 如果当前在 Flash 界面下弹出的就是 AS 3 的帮助文档;
  • 如果当前在 Word 下弹出的就是 Word 帮助;
  • 在 Windows 下弹出的就是 Windows 帮助和支持。

同一个事件发生在不同的对象上会产生不同的结果。

多态的优点

  • 1. 消除类型之间的耦合关系
  • 2. 可替换性
  • 3. 可扩充性
  • 4. 接口性
  • 5. 灵活性
  • 6. 简化性

多态存在的三个必要条件

  • 继承
  • 重写
  • 父类引用指向子类对象

比如:

Parent p = new Child();

当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,再去调用子类的同名方法。

多态的好处:可以使程序有良好的扩展,并可以对所有类的对象进行通用处理。

以下是一个多态实例的演示,详细说明请看注释:

public class Test {
    public static void main(String[] args) {
      show(new Cat());  // 以 Cat 对象调用 show 方法
      show(new Dog());  // 以 Dog 对象调用 show 方法
                
      Animal a = new Cat();  // 向上转型  
      a.eat();               // 调用的是 Cat 的 eat
      Cat c = (Cat)a;        // 向下转型  
      c.work();        // 调用的是 Cat 的 work
  }  
            
    public static void show(Animal a)  {
      a.eat();  
        // 类型判断
        if (a instanceof Cat)  {  // 猫做的事情 
            Cat c = (Cat)a;  
            c.work();  
        } else if (a instanceof Dog) { // 狗做的事情 
            Dog c = (Dog)a;  
            c.work();  
        }  
    }  
}
 
abstract class Animal {  
    abstract void eat();  
}  
  
class Cat extends Animal {  
    public void eat() {  
        System.out.println("吃鱼");  
    }  
    public void work() {  
        System.out.println("抓老鼠");  
    }  
}  
  
class Dog extends Animal {  
    public void eat() {  
        System.out.println("吃骨头");  
    }  
    public void work() {  
        System.out.println("看家");  
    }  
}

执行以上程序,输出结果为:

吃鱼
抓老鼠
吃骨头
看家
吃鱼
抓老鼠

大部分内容参考菜鸟教程,讲的真是通俗易懂。

 



/*
	多态的格式:
		父类(接口) 变量名 = new 子类();
	
	多态的好处:
		提高了代码的扩展性,前期定义的代码可以使用后期的内容
	
	多态的弊端:clas
		前期定义的代码不能使用子类独有(特有)的功能
	
	多态使用的条件:
		1.必须有继承,实现
		2.必须要有方法的重写
		
		
	多态中成员的特点:
		1.成员变量和静态函数,以左边类型主
		2.成员函数,以右边为主
*/


class Fu{
	
	String name = "zs";
	void talk(){
		System.out.println("爸爸会讲中文...");
	}
	
	static void smoke(){
		System.out.println("爸爸吸烟...");
	}
}

class Zi extends Fu{
	
	String name = "lisi";
	void talk(){
		
		System.out.println("儿子会讲英文...");
	}
	static void smoke(){
		System.out.println("儿子吸烟...");
	}
}

class DuotaiDemo4{
	
	public static void main(String[] args){
		Fu f = new Zi();
		//f.talk();
		//System.out.println(f.name);
		f.smoke();
	}
}

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/114822.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 位运算实现两个数的加法

    位运算实现两个数的加法

    2022年2月3日
    56
  • 华为转移到ios传输中断_社保不转移 重新开户

    华为转移到ios传输中断_社保不转移 重新开户iPhone备份麻烦,大家都知道!到底有多麻烦呢?以小编的经验,大概是折腾一晚上都不一定能顺利完成吧。。。iPhone自带的备份工具iCloud,在有WiFi的情况下可以自动备份,但其不大的免费空间对于大家来说显然不够,需要花高价扩容。另外,如果备份的数据比较多,就会拉慢备份速度,严重影响手机的正常使用。而且,iCloud不够稳定,所以使用过程中很有可能造成数据的丢失!简直不能再糟糕!有…

    2022年9月17日
    2
  • 新年放大招:Github 私库免费了!

    新年放大招:Github 私库免费了!据《Github嫁入豪门》这篇文章刚好半年了,那时候栈长还表示对Github的期待,仅仅半年,现在就已经有了巨大改变。微软果然是豪门,嫁入半年就已经开花结果了,免费私库已全面无限制开启……我们来看下Github的官宣:Newyear,newGitHub:AnnouncingunlimitedfreeprivatereposandunifiedEnterpr…

    2022年7月18日
    17
  • 这就是我在床上最受不了的声音

    相信大家都遭受过周末装修这种痛苦的经历,逃不过也躲不了。   如果说小孩哭声、隔壁邻居为爱鼓掌的声音和外面商铺的音响声已经够讨厌了…   那么装修的…

    2021年6月21日
    138
  • mysql批量新增数据_word修改内容目录怎么更新

    mysql批量新增数据_word修改内容目录怎么更新建表CREATETABLE`t`(`id`int(11)NOTNULL,`age`int(11)DEFAULTNULL,`name`varchar(20)DEFAULTNULL,PRIMARYKEY(`id`))ENGINE=InnoDBDEFAULTCHARSET=utf81.insertintovalues、inser…

    2022年10月6日
    3
  • 网络恐怖袭击真实存在吗知乎_911恐怖袭击事件真实过程

    网络恐怖袭击真实存在吗知乎_911恐怖袭击事件真实过程作者:zdnet.co.uk2005-06-0705:0PM网络恐怖主义是一种真的存在的威胁还是仅仅是网络安全日常维护工作中的一种困惑?”我们的敌人将使用我们的技术来和我们做斗争…事实是他们可能来自于第三世界国家,他们不会以任何方式告诉我们,他们不会使用哪些技术以及他们将会用何种方式使用我们的技术。他们将会发现那些我们应该构建安全但是我们没有考虑到的地方,然后他们就会利用这些漏洞。”本

    2025年9月25日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号