Java中的多态

   
public class test {
	public static void main(String[] args) {
		Father f = new Son();
		System.out.println(f.num);
		f.print();
	}
}

class Father{
	int num=10;
	public void print(){
		System.out.println("Father");
	}
}

class Son extends Father{
	int num=20;
	public void print(){
		System.out.println("Son");
	}
}


 

多态也叫作动态绑定。

对于成员变量:

       编译、运行看的都是父类。

对于非静态的成员方法:

      环境执行程序要经过编译、运行;成员方法在编译的时候到父类中找print( ),在运行的时候到子类中找print( )【编译看的是父类,运行看的是子类】。

对于静态的成员方法:

     因为是静态的,相当于是用类名去调用,故编译、运行都看父类的。

并且对于非静态成员方法,如果print( )只存在于子类中,在父类中没有print( )的话,编译的时候就会出错,故不会运行。

父类引用指向子类对象是向上转型

先有向上转型,然后才有向下转型

多态的好处和弊端:

         1、好处:提高了代码的维护性(是由继承保证的)

package pro5;

public class test {
	public static void main(String[] args) {
		//Animal a = new Dog();在实际开发中很少这样用,用下面的方式可以使用子类中的特定属性和行为
		meth(new Cat());
		meth(new Dog());
	}
	
	public static void meth(Animal a){ //当作参数的时候用多态最好,因为扩展性强
		//关键字instanceof用来判断前边的引用是否和后面的数据类型相等
		if(a instanceof Cat){
			Cat c1 =(Cat)a;
			c1.print();
			c1.eat();
		}else if(a instanceof Dog){
			Dog d1 =(Dog) a;
			d1.print();
			d1.eat();
		}else{
			a.print();
		}
	}
}

class Animal{
	public void print(){
		System.out.println("Animal");
	}
}


class Cat extends Animal{
	public void print(){
		System.out.println("Cat");
	}
	public void eat(){
		System.out.println("Cat Eat");
	}
}

class Dog extends Animal{
	public void print(){
		System.out.println("Dog");
	}
	public void eat(){
		System.out.println("Dog Eat");
	}
}





         2、弊端:不能够使用子类特有的属性和行为。


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值