java基础学习记录:10.3 多态及类型转换

1、语法格式:

1.父类类名  引用名称  =  new  子类类名();

2.当是多态时,该引用名称只能访问父类中的属性和方法,但是优先访问子类重写以后的方法

2、将多个对象调用一个方法,得到不同的结果

3、满足多态的条件:

1.子类必须继承父类

2.子类重写父类的方法

3.父类类名  引用名称  =  new  子类类名();

Animal animala = new Cat();


4、多态的好处

减少代码的冗杂性

/*

主人喂养狗、猫

*/

Pet类

public class Pet {

	public void eat() {
		System.out.println("宠物吃东西");
	}

}

Dog02类

public class Dog02 extends Pet{

	public void eat() {
		System.out.println("狗吃狗粮");
	}
	
}

Cat02类

public class Cat02 extends Pet{

	public void eat() {
		System.out.println("猫吃猫粮");
	}
	
}

Master类

public class Master {

	public static void main(String[] args) {
		//创建狗对象
		Dog02 dog = new Dog02();
		//创建猫对象
		Cat02 cat = new Cat02();
		//当主人喂养狗
		dog.eat();
		//当主人喂猫
		cat.eat();
		//通常,当我们喂一只宠物就需要创建一个新的对象,调用一个新方法
		System.out.println("分界线----------------------------");
		//使用多态写法
		//Pet pet = new Dog02();
		Pet pet = new Cat02();//当我们需要喂养猫的时候,只需要把Dog02改成Cat02即可
		pet.eat();
	}
	
}

输出结果为:


5、两种类型转换

1.向上转型

      父类类型    引用名称    =    new    子类类名();

      当是多态时,该引用名称只能访问父类中的属性和方法,但是优先访问子类重写以后的方法

2.向下转型

      1)当是多态时,并且访问子类

Cat02类改为

public class Cat02 extends Pet{

	public void eat() {
		System.out.println("猫吃猫粮");
	}
	//Cat02类独有play01方法
	public void play01() {
		System.out.println("猫玩线球");
	}
	
}

Master02类

public class Master02 {

	public static void main(String[] args) {
		Pet pet = new Cat02();//多态,向上转型
		pet.eat();
		//pet.play01();当调用Cat02类中的play01方法时,会出现错误
		//父类类型不能调用子类独有的属性或方法
		
		//进行向下转型,即可调用子类独有的属性或方法
		Cat02 cat = (Cat02)pet;
		cat.play01();
	}
	
}

输出结果为:

     2)当进行向下转型时,建议先进行判断,当合法时,则转为对应类型,使用instanceof关键字进行判断,否则可能会出现类型转换异常

Master02类

public class Master02 {

	public static void main(String[] args) {
		Pet pet = new Cat02();//多态,向上转型
		pet.eat();
		//pet.play01();当调用Cat02类中的play01方法时,会出现错误
		//父类类型不能调用子类独有的属性或方法
		
		//进行向下转型,即可调用子类独有的属性或方法
		Cat02 cat = (Cat02)pet;
		cat.play01();
		
		/*Dog02 dog = (Dog02)pet;
		 * dog.play02();
		 * 会出现错误,当前引用名称pet存放的是猫对象的地址,因此不能强制转成狗
		 */
		//所以在向下转型前先进行判断是否合法,使用instanceof关键字
		if(pet instanceof Cat02) {
			Cat02 cat02 = (Cat02)pet;
			cat02.play01();
		}else if(pet instanceof Dog02){
			Dog02 dog = (Dog02)pet;
			dog.play02();
			
		}
		
	}
	
}

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值