java1234开源博客系统
博客信息

Java面向对象-对象的多态性

发布时间:『 2016-10-12 15:37』  博客类别:Java核心基础  阅读(7277) 评论(0)

Java面向对象-对象的多态性


Java中的多态性表现:

1,方法的重载和重写;

2,可以用父类的引用指向子类的具体实现,而且可以随时更换为其他子类的具体实现;



我们先搞个父类Animal:

package com.java1234.chap03.sec13;

public class Animal {

	public void say(){
		System.out.println("我是一个动物");
	}
}


再搞两个子类,分别是Dog和Cat类,重写父类方法say:

package com.java1234.chap03.sec13;

public class Cat extends Animal{

	public void say(){
		System.out.println("我是一个猫");
	}
}
package com.java1234.chap03.sec13;

public class Dog extends Animal{

	public void say(){
		System.out.println("我是一个狗");
	}
}


然后我们写个Test测试类:

package com.java1234.chap03.sec13;

public class Test {

	public static void main(String[] args) {
		Dog dog=new Dog();
		dog.say();
		
		Cat cat=new Cat();
		cat.say();
	}
}


运行输出:

我是一个狗

我是一个猫



这个大家肯定能看明白 简单的子类继承 以及实例化对象 调用方法 ;


下面我来用多态测试,父类引用指向子类具体实现:

package com.java1234.chap03.sec13;

public class Test {

	public static void main(String[] args) {
		// 父类引用指向Dog子类的具体实现
		Animal animal=new Dog();
		animal.say();
		
		// 更换实现
		animal=new Cat();
		animal.say();
	}
}


运行输出:

我是一个狗

我是一个猫



对象的转型:

向上转型:子类对象->父类对象 安全

向下转型:父类对象->子类对象 不安全


比如上面的实例:Animal animal=new Dog(); 就是后面的new Dog() 子类对象 向上  Animail animal 转型  是安全的;


向下转型 是父类对象强制转换成子类对象:我们来改下Test类:

package com.java1234.chap03.sec13;

public class Test {

	public static void main(String[] args) {
		// 父类引用指向Dog子类的具体实现
		Animal animal=new Dog();
		animal.say();
		
		// 向下转型
		Dog dog=(Dog) animal;
		dog.say();
		
		// 向下转型  因为animal指向的是Dog具体实现 所以会报错
		Cat cat=(Cat)animal;
		cat.say();
	}
}


运行报错:

我是一个狗

我是一个狗

Exception in thread "main" java.lang.ClassCastException: com.java1234.chap03.sec13.Dog cannot be cast to com.java1234.chap03.sec13.Cat

at com.java1234.chap03.sec13.Test.main(Test.java:15)


转换异常 所以说向下转型是不安全的,我们必须知道具体的实现类;



我们上面用的继承方式演示了多态 其实在实际开发中 更多的是用接口:

我们再写一个实例:

我们先建一个父类接口People:

package com.java1234.chap03.sec13;

public interface People {

	public void say();
}


接下来写两个具体实现类,Student Teacher:

package com.java1234.chap03.sec13;

public class Student implements People{

	@Override
	public void say() {
		System.out.println("我是学生");
	}

}
package com.java1234.chap03.sec13;

public class Teacher implements People{

	@Override
	public void say() {
		System.out.println("我是老师");
	}

}


我们来写一个测试类:

package com.java1234.chap03.sec13;

public class Test2 {

	public static void main(String[] args) {
		People p1=new Student();
		p1.say();
		
		p1=new Teacher();
		p1.say();
	}
}

运行输出:

我是学生

我是老师




关键字:   Java     多态  
关注Java1234微信公众号
博主信息
Java1234_小锋
(知识改变命运,技术改变世界)
Powered by Java1234 V3.0 Copyright © 2012-2016 Java知识分享网 版权所有