Java三大特征——多态

多态

定义:是指同一行为,具有多种不同表现形式。

多态的前提:1.继承或实现【二选一】

                       2.方法的重写

                       3.父类引用指向子类对象

 

多态的体现:

                    格式:  父类类型  变量名 = new   子类对象;

                                  变量名.方法名();

代码如下:

                   Fu f = new zi();

                    f.方法名

当使用多态方式调用方法时,首先检查父类中是否有该方法,若果没有,则编译出错;如果有,执行的是子类重写后的方法。

代码如下:

//定义父类
public  abstract class Animal01 {
	public abstract void eat();

}

//定义子类
public class Cat01 extends Animal01 {
		public void eat(){
			System.out.println("吃鱼");
		}
}

public class Dog01 extends Animal01{
	public void eat() {
		System.out.println("吃骨头");
	}
}

//定义测试类
public class Test01 {

	public static void main(String[] args) {
        //多态形式创建对象
		Animal01 animal01 = new Cat01();
        //调用的是Cat 的eat
		animal01.eat();
		
        //多态形式创建对象
		Animal01 animal02 = new Dog01();
        //调用的是Dog的eat
		animal02.eat();

	}

}

引用类型转换

向上转型:多态本身是子类类型向父类类型转换的过程,这个过程是默认的。

当父类引用指向一个子类对象时,便是向上转型。

使用格式:

 
父类类型  变量名 = new 子类类型();
如:Animal a = new Cat();

向下转型:父类类型向子类类型向下转换的过程,这个过程是强制的。

一个已经向上转型的子类对象,将父类引用转为子类引用,可以使用强制类型转换的格式,便是向下转型。

使用格式:

子类类型     变量名    =  (子类类型)  父类变量名;

如:Cat c=(Cat) a

为何使用转型:

当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误。也就是说,不能调用子类拥有,而父类没有的方法。这也是多态给我们带来的一点"小麻烦"。所以,想要调用子类特有的方法,必须做向下转型。

演示代码如下:

//定义父类 Animal
public  abstract class Animal {
	public abstract void eat();
}

//定义子类 Cat
public class Cat extends Animal {

	@Override
	public void eat() {
		System.out.println("吃鱼");
		
	}
	
	public void sleep() {
		System.out.println("睡觉");
	}

}


//测试类
public class Test {

	public static void main(String[] args) {
		//向上转型
		Animal a = new Cat();
		a.eat();//调用的是Animal的eat方法
		
		//向下转型
		Cat c = (Cat)a;
		c.sleep();//调用的是Cat的sleep方法
	}

}

 

 

猜你喜欢

转载自blog.csdn.net/XianYuZong/article/details/82150498