Java多态及产生条件

涎涎原创约 641 字大约 2 分钟...JavaJava

101-Java多态及产生条件.mdopen in new window

注意

本博文仅供学术研究和交流参考,严禁将其用于商业用途。如因违规使用产生的任何法律问题,使用者需自行负责。

  • 多态
    • 简单来说,多态是具有表现多种形态的能力的特征
    • 同一个实现接口,使用不同的实例而执行不同操作
  • 不同的对象对同一行为作出的不同响应

  • 多态存在的三个必要条件

    • 要有继承,或实现
    • 要有重写
    • 父类引用指向子类对象

    一旦满足以上3个条件,当调用父类中被重写的方法后,运行时创建的是哪个子类的对象,就调用该子类中重写的那个方法

  • 在执行期间(而非编译期间)判断所引用对象的实际类型,根据其实际类型调用相应的方法

  • 多态的优点

    • 简化代码
    • 改善代码的组织性和可读性
    • 易于扩展

示例代码:

package 引用类型的类型转换;

public class Animal {

	public void eat() {
		System.out.println("eating....");
	}
}
package 引用类型的类型转换;

public class Dog extends Animal {

	public void showName() {
		System.out.println("一只Dog");
	}
	
	@Override
	public void eat() {
//		super.eat();
		System.out.println("eat 骨头。。。");
	}
}
package 引用类型的类型转换;

public class Cat extends Animal {

	public void cry() {
		System.out.println("喵喵叫。。。。。");
	}
	
	@Override
	public void eat() {
//		super.eat();
		System.out.println("eat 鱼。。");
	}
 
}
package 引用类型的类型转换;

public class Test2 {

	/**
	 * 多态产生的条件:
	 * 要有继承,或 实现
	 * 要有重写
	 * 父类引用指向子类对象
	 * <p>Title: main</p>  
	 * <p>Description: </p>  
	 * @param args
	 */
	public static void main(String[] args) {
//这里不能调用cry()方法,因为将其上溯造型成咯Animal,
//Animal里有有 这方法才有,Animal里没有就 没有
//		Animal a = new Cat();
//		
//		Cat c = (Cat) a;//下溯造型
//		
//		c.cry();
		
		
		
		Animal a = new Animal();
		a.eat();
		Animal b = new Cat();
		b.eat();
		Animal c = new Dog();
		c.eat();
		/**
		 * 调用相同的方法,其行为是不一样的行为,这种行为叫做多态 
		 * 那么这种多态是由于什么原因造成的呢?
		 * 是由于第一发生咯继承
		 * 第二:子 类重写咯父类的方法
		 * 第三:父类引用指向子类实例
		 * 
		 */
	}
}

分割线


相关信息

以上就是我关于 Java多态及产生条件 知识点的整理与总结的全部内容,另附源码open in new window

上次编辑于:
贡献者: 涎涎
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.4