Java day10

多态

概念:父类引用指向子类对象。
    举例:Animal a = new Bird();
注意:
	1>二者之间必须有继承关系。
	2>父类引用只能调用父类中定义的属性和方法,不能调用子类独有的属性和方法。
多态中的方法覆盖:
	子类覆盖父类方法,使用父类引用调用,执行的是覆盖后的。
多态的应用:
	1>使用父类作为方法的形式参数:能够接受到的参数类型子类对象+本身类型对象
	2>使用父类作为方法的返回值类型:能够返回的参数类型子类对象+本身类型对象
多态的好处:
	可以把不同的子类对象都当做父类类型来看待,从而屏蔽不同子类对象之间的实现差异。

public class Vehicle {
	private int speed;// 速度

	
	public int getSpeed() {
		return speed;
	}


	public void setSpeed(int speed) {
		this.speed = speed;
	}


	public void run() {
		System.out.println("这个车正在以每小时" + speed + "公里前进....");
	}
}

public class Car extends Vehicle{
	private String color;

	
	public String getColor() {
		return color;
	}


	public void setColor(String color) {
		this.color = color;
	}


	public void run() {
		System.out.println("这个" + color + "的跑车正在以每小时" + getSpeed() + "公里前进....");
	}
}

public class Bus extends Vehicle{
	private int seatnum;//座位数
	
	
	public int getSeatnum() {
		return seatnum;
	}


	public void setSeatnum(int seatnum) {
		this.seatnum = seatnum;
	}


	public void run(){
		System.out.println("这个"+seatnum+"个座位的公交车正在以每小时"+getSpeed()+"公里前进....");
	}
}

public class Bicycle extends Vehicle {
	private String brand;

	
	public String getBrand() {
		return brand;
	}


	public void setBrand(String brand) {
		this.brand = brand;
	}


	public void run() {
		System.out.println("这个" + brand + "品牌的自行车正在以每小时" + getSpeed() + "公里前进....");
	}
}

public class Employee {
	private String name;
	
	public String getName() {
		return name;
	}


	public void setName(String name) {
		this.name = name;
	}


	//多态:场景一使用父类作为形式参数
	public void goHome(Vehicle v){
		System.out.println(name+"正在乘坐");
		v.run();
	}
	

	//多态:场景二使用父类作为返回值类型
	public Vehicle buyVehicle(int money){
		Vehicle v;
		if(money <= 2){
			Bicycle bc = new Bicycle();
			bc.setBrand("捷安特"); 
			bc.setSpeed(50);
			v = bc;
			
		}else if(money <= 100){
			Car c = new Car();
			c.setColor("粉色");
			c.setSpeed(20);
			v = c;
			
		}else if(money <= 500){
			Bus b = new Bus();
			b.setSpeed(90);
			b.setSeatnum(30);
			v = b;
		}else{
			v = null;
		}
		
		return v;
	}
}

向上、向下转型

Animal a = new Bird();//向上转型:父类引用中保存真实子类对象
Bird d = (Bird)a; //向下转型:将父类引用中保存的真实类型强转回本身类型
Cat c = (Cat)a;//ClassCastException:类型转换异常

public class Animal {	
	public void eat(){
		System.out.println("动物吃饭");
	}
}

public class Bird extends Animal{
	
	public void eat(){
		System.out.println("猫吃鱼");
	}
	
	public void fly(){
		System.out.println("鸟儿飞在空中飞翔");
	}
}

instanceof 关键字

语法:引用 instanceof 类型
作用:判断引用中保存的真实类型,返回truefalse。
好处:避免强转出现错误。

public static void main(String[] args) {
		Animal a = new Bird();
		
		if(a instanceof Bird){
			Bird b = (Bird)a;
			b.fly();
		}else if(a instanceof Cat){
			Cat c = (Cat)a;
			c.eat();
		}
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值