第三章多态
本章目标
a。掌握多态的优势和应用场合
b。子类重写父类的方法
c。掌握instanceof运算符的使用
一丶多态
什么是多态?
多态是具有表现多种形态的能力的特征。同一个实现接口,使用不同示例而执行不同的操 作。
同样的行为,但结果不同。同一个引用类型,使用不同的实例而执行不同的操作。
父类做引用,子类做对象。
形式一:父类做形参,子类做实参
class A{
public void feed(Pet pet ){
pet.eat();
}
}
class B{
Dog dog = new Dog();
A a = new A();
a.feed(dog);
}
形式二:父类做类型,子类实例化。
Peg peg = new Dog();
//自动转换
peg.eat();
形式三:父类作为方法的返回值类型,子类示例化。类型自动转化。
public Pet getpet(int a ){
Pet pet = null;
if(a == 1 ){
pet = new Dog () ;
}else if (a == 2 ){
pet = new Penguin();
}else if (a == 3 ){
pet = new Cid();
}
return pet ;
}
二丶方法重写
1位置:在子类和父类中有同名的方法。
2方法:方法名相同,返回值和修饰符相同,参数列表相同,方法体不同。
三丶instanceof
子类转换为父类,向上转型会自动转换。
父类转换为子类,向下转型 使用 ·
instanceof 判断是否是父类与子类
class A{
public void paly (Pet pet) {
if ( pet instanceof Dog) {
Dog dog = (Dog) pet ;//向下转型 进行强制转换。
}else if ( pet instanceof Penguin ) {
Penguin pe = (Penguin)pet ;
}else if ( pet instanceof Cat) {
Cat cat = (Cat)pet ;
}
}
}
class B {
A a = new A ();
a.paly(Dog);
}
什么时候会产生多态
a. 有继承关系的时候会产生多态
b. 方法重写的时候
当进行数据转换的时候,会丢失数据 , 可以是:
当子类转换为父类时 , 会丢失子类特有的方法和属性