Demo10_多态01

package test02;

public class Demo10_DuoTai01 {

public static void main(String[] args) {

// jiduquan j = new jiduquan();
// j.houjiao();
// j.jidu();
// j.chifan();

    //接受cat,让cat做事

// dog d = new dog();
animal a = new cat();//多态的代码体现
// d.lookhome();//不可以调用
a.eat();
animal f = new dog();
f.eat();
if(a instanceof cat)//a指向的对象的类型是cat类型
{
//将a转成cat类型
cat c = (cat)a;
c.catchmouse();
}
else if (a instanceof dog)
{
dog d =(dog)a;
d.lookhome();
}
/*每多一个动物就需要单独加一个功能,让这个对象去做事
* 如何提高扩展性
* 发现既然让动物去吃,无论是dog还是cat
* eat是他们的共性,那么就进行抽取,抽取到父类animal中
*
* 多态()体现
* 父类引用只想自己的子类对象
* dog d = new dog();//左右都是dog类型
* animal d = new dog();//左边animal 右边dog
*
*
* 好处:
* 提高了程序的扩展性
* 弊端
* 通过父类调用子类对象时,只能调用父类中已有的方法,不能调用子类特有的方法
*
* 多态的前提
* 1.必须有关系:继承 实现
* 2.通常有重写操作
*
* 子类的特有方法如何调用
*
* 但是父类的 引用指向子类对象时让子类对象进行了类型的提升
* 向上转型的好处:提高拓展性隐藏了子类型 弊端:不能调用子类的特有方法
* 如果想要子类型的特有方法只有子类型可以用 可以向下转型,强制转换
* animal d = new dog();
*d.eat();
*dog d = (dog)d;//将d 装换成dog类型。向下转型
*
* animal d = new dog();
//cat c = (cat)a;向下转型因为不明确子类对象类型所以容易引发classcastexception异常
* 为了避免这个问题,需要在向下转型前,做类型判断 判断关键词 instanceof
if(a instanceof cat)//a指向的对象的类型是cat类型
{
//将a转成cat类型
cat c = (cat)a;
c.catchmouse();
}
else if (a instanceof dog)
{
dog d =(dog)d;
d.lookhome();
}
* */

}

}
/*abstract class quan
{
public abstract void houjiao();
public abstract void chifan();
}
class jiduquan extends quan implements jidu
{
public void houjiao(){System.out.println(“a”);}//实现父类中的方法
public void chifan(){System.out.println(“b”);}
public void jidu(){System.err.println(“c”);}
}
//可能有其他类也具有jidu属性
//缉毒犬具有犬的功能又具有jidu功能无法直接进行多继承
//jiduqun多实现即可
//将quan定义成类,jidu是quan的一个扩展功能,jidu定义成一个接口
interface jidu
{
public abstract void jidu();
}*/
/*小结:
* 1.抽象类是描述事物的基本功能,可以定义成非抽象的方法
* 接口中定义的只有非抽象方法,负责功能的扩展
* 2.类与类之间是继承关系(is a)
* 类与接口之间是实现关系(like a)
*/
abstract class animal
{
public abstract void eat();
}

class dog extends animal
{
public void eat()
{
System.out.println(“gutou”);
}
public void lookhome()
{
System.err.println(“kanjia”);
}
}
class cat extends animal
{
public void eat()
{
System.out.println(“yu”);
}
public void catchmouse()
{
System.err.println(“catchmouse”);
}
}

猜你喜欢

转载自blog.csdn.net/mingxu_W/article/details/81409934
今日推荐