多态

一、概念


多态:父类引用指向子类对象


前提:必须有子类关系或者类实现对象接口关系


使用:在使用多态后的父类引用变量调用方法时,会调用子类重写后的方法


二、继承VS实现


继承:子类继承父类可以被继承的内容,是this is的关系


实现:实现类实现接口中的抽象方法,是额外功能,是like is的关系


三、定义格式


1.普通继承


父类:


public class Fu(){}

子类:


public class Zi extends Fu(){}

测试类:


public class Test {

	public static void main(String[] args) {
		Fu f=new Zi();
	}
}


2.抽象类继承


抽象父类:


public abstract class Fu {
	//定义抽象方法
	public abstract void eat();
}


子类重写父类方法:


public class Zi extends Fu {
	//子类重写父类方法
	public void eat(){
		System.out.println("子类爱吃饭");
	}
}

3.接口实现


接口:


public interface Fu {
	//定义抽象方法,可省略public abstract
	public abstract void eat();
}

实现类:

public class Zi implements Fu {
	//实现类重写接口中抽象方法
	public void eat(){
		System.out.println("子类爱吃饭");
	}
}

四、向上、下转型


向上转型:当有子类对象赋值给一个父类引用时,便是向上转型,多态本身就是向上转型的过程。


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


public class Test01 {
	public static void main(String[] args) {
		//猫的向上转型
		Animal c=new Cat();
		//调用猫和动物的共有方法
		c.eat();
		
		//猫的向下转型,判断c是否属于Cat类
		if(c instanceof Cat){
			Cat c1=(Cat)c;
			//调用猫的特有方法
			c1.catchMouse();
		}
        }
}


instanceof:判断是否对象属于子类


变换一:多态调用中方法时传参


题目:在电脑的USB接口可以连接键盘、鼠标

分析:键盘和鼠标都有USB插口,它们的子类作为参数传入到电脑的使用USB接口便可实现对应方法,在测试类中使用多态使得只要是继承了USB接口的事物都可以完成同样的方法。


测试类:


public class Test07 {
	public static void main(String[] args) {
		//向上转型,成员方法运行看子类,所以调用鼠标里的方法,同时也是USB中的虚方法
		USB m=new MouseUSB();
		Computer c=new Computer();
		c.useUSB(m);
       }
}

电脑类:


public class Computer {
        //使用USB接口,传入USB,调用接口实现类中的功能
	public void useUSB(USB u){
		u.open();
		u.close();
	}
}

USB父类:

public interface USB {
	//定义开关的虚方法
	public abstract void open();
	public abstract void close();
}

鼠标USU子类:

public class MouseUSB implements USB {
	//重写类中的方法
	public void open() {
		System.out.println("鼠标打开");
		
	}
	public void close() {
		// TODO Auto-generated method stub
		System.out.println("鼠标关闭");
	}
}


五、多态优缺点


优点:当父类的引用指向子类对象时,隐藏了子类类型,提高了代码的扩展性。


弊端:只能使用父类共性的内容,而无法使用子类特有功能,功能有限制,此时可以通过向下转型。


小结:


多态其实就是子类继承父类之后要实现父类中的功能,这样就可以扩展子类的使用,正如上个例子中,电脑中USB功能的实现,可以传入键盘和鼠标这样就可以使得代码的复用性增强。



评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值