Java面向对象(2.多态及类型转换)

多态是什么
多态是 animal a=new dog();
给出父类animal,子类dog和cat


public class animal {	//父类
	public void eat() {
		System.out.println("吃东西");
	}
}

public class Cat extends animal{
	public void eat() { 	//子类
		System.out.println("猫猫酱吃鱼");
	}
	public void catchfish() {
		System.out.println("猫猫酱抓鱼");
	}
}

public class Dog extends animal{		//子类
	public void eat() {
		System.out.println("狗比酱吃肉");
	}
	public void Lookhome() {
		System.out.println("狗比酱看家");
		
	}
}

在父类中我给出了eat方法,子类对eat方法都进行了重写。
当我们在主函数中使用cat和dog中的eat方法的时候得到的结果都是重写之后的方法。

那么有一个问题

public class Demo extends animal {
public static void main(String[] args) {
	Cat cat =new Cat();
	Dog dog=new Dog();
	method(cat);
	method(dog);
	}
public static void method(Dog a) {
	a.eat();
}
public static void method(Cat a) {
	a.eat();
	}
}

既然cat和dog都是继承animal的那么有没有什么方法能够简化method方法。
多态很好的解决了这个问题

public static void method(animal a) { //animal a = Dog dog 或者animal a = Cat cat
	a.eat();
if (a instanceof Dog) { \\instanceof 函数是判断是否为该类型
	Dog d =(Dog)a;
	d.Lookhome();
}
if (a instanceof Cat) {
	Cat c = (Cat)a;
	c.catchfish();
}
}

下面这段代码体现了类型转换和多态

animal b=new Dog();
	Dog a=(Dog)b;
	a.Lookhome();

父类引用指向子类对象
b是animal类 但是b能够使用Dog类中所有的方法
多态的成员变量访问特点:
成员变量:编译看父类,运行看父类
成员方法:编译看父类,运行看子类

举一个例子 如果父类里面有一个int i=1;
子类里面有int =2;
那么输出的是1
如果就像上面代码中的cat和dog那么输出的就是重写过的eat方法,

父类引用指向子类对象
父类的方法用子类
父类的成员变量还是用父类的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值