栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java多态

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java多态

一、什么是多态

当对象变量e引用A对象时,e.getnum()调用的是A类的getnum方法,当e引用B对象时,e.getnum()调用的是B类的getnum方法

一个对象变量(如e)可以指示多种实际类型的现象称为多态(polymorphism),在运行时能够自动地选择适当的方法,称为动态绑定(dynamic binding)

有一个简单的规则可以判断是否应该将数据设计为继承关系,这就是“is-a”规则,他指出子类的每个对象也是超类的对象。“is-a”规则的另一种表述是替换原则,它指出程序中出现超类对象的任何地方都可以使用子类对象替换

在java中,对象变量是多态的(polymorphic),一个A类型的变量既可以引用A类型的对象,也可以引用A类型的任何一个子类的对象

使用如下

package dzy;

public class Animal {
	public void what() {
		System.out.println("I'm animal");
	}
}
package dzy;

public class Dog extends Animal {
	public void what() {
        System.out.println("I'm dog");
    }
}
package dzy;

public class Pig extends Animal{
	public void what() {
        System.out.println("I'm pig");
    }
}
package dzy;

public class Text {

	public static void main(String[] args) {
		Animal animal = new Dog();
		// 调用的是dog的what
		animal.what();

		Animal animal2 = new Pig();
		// 调用的是pig的what
		animal2.what();

	}

}

输出结果

 二、优点

提高了代码的拓展性,使用父类类型作为方法形式参数,传递子类对象给方法,进行方法的调用

package dzy;

public class Text {

	public static void main(String[] args) {
		Dog animal = new Dog();
		Pig animal2 = new Pig();
		
		animal.what();
		animal2.what();
		//我们可以使用animalWhat直接替代了不同动物
		animalWhat(animal);
		animalWhat(animal2);
	}

    public static void animalWhat(Animal animal){
        animal.what();
    }
}

输出结果

 三、局限

对于某个子类有些独有的功能方法时,此时我们的多态的写法就无法访问子类独有功能了

重新定义pig

package dzy;

public class Pig extends Animal {
	public void what() {
		System.out.println("I'm pig");
	}

	public void charactor() {
		System.out.println("I'm so so big");
	}
}
package dzy;

public class Text {

	public static void main(String[] args) {
		Animal animal = new Pig();
		animal.what();             //可以运行
		animal.charactor();        //报错
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/827857.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号