资讯详情

面向对象三大要素(2/2)

面向对象三要素(2/2)

多态


多态

1.继承和实现关系 2.有方法的重写 3.父类引用指向子类对象 (父类名 对象名 = new 子类名();

成员变量: 编译看左边,执行看左边 提示:根据多态前提3:有父类引用指向子类对象,左为父类,右为子类。 成员方法:编译看左边,执行看右边

看不懂吗?如果你看不懂,那就去代码吧?

public class Animal { 
        //动物类      public int age = 40 ;      public void eat() { 
                 System.out.println("动物吃东西");     }  public class Dog extends Animal { 
        ///狗继承动物类      public int age =20 ;     public int weight = 10 ;      @Override     public void eat() { 
                 System.out.println("够吃骨头");     }      public void playGame() { 
                 System.out.println("狗拿耗子");     }  public class AnimalDemo { 
        //测试类     public static void main(String[] args) { 
                 Animal a = new Dog();          System.out.println(a.age);
    	System.out.println(a.weight);
    }
System.out.println(a.weight);

在这个上看着没事,但是在软件上就可以看见已经报红了。 为什么?不是都是Dog类的属性嘛?为什么age可以用weight不能使用呢?

这就是上面说的成员变量编译看左边,执行看左边,父类中没有weight这个属性自然它就报错了。执行看左边怎么说呢?

"D:\idea2019\IntelliJ IDEA 2019.3.3\jbr\bin\java.exe" "-javaagent:D:\idea2019\IntelliJ IDEA 2019.3.3\lib\idea_rt.jar=59673:D:\idea2019\IntelliJ IDEA 2019.3.3\bin" -Dfile.encoding=UTF-8 -classpath D:\IDEA\jihe\out\production\集合;D:\IDEA\jihe\lib\javax.transaction.jar;D:\IDEA\jihe\lib\javax.servlet.jar;D:\IDEA\jihe\lib\javax.jms.jar;D:\IDEA\jihe\lib\javax.servlet.jsp.jar;D:\IDEA\jihe\lib\javax.servlet.jsp.jstl.jar;D:\IDEA\jihe\lib\javax.persistence.jar;D:\IDEA\jihe\lib\javax.ejb.jar;D:\IDEA\jihe\lib\javax.annotation.jar;D:\IDEA\jihe\lib\javax.resource.jar com.Text.AnimalDemo
40

进程已结束,退出代码 0

这是上面那段代码去除输出weight之后的结果可以看成为啥执行也要看左边了吗? 再看看成员方法:

public class AnimalDemo { 
        
    public static void main(String[] args) { 
        
        Animal a = new Dog();

        System.out.println(a.age);

        a.eat();
        a.playGame();
    }
}

同样,a.playGame这个方法也是用不了的,父类中没有这个方法。拿去它输出是什么结果呢?

"D:\idea2019\IntelliJ IDEA 2019.3.3\jbr\bin\java.exe" "-javaagent:D:\idea2019\IntelliJ IDEA 2019.3.3\lib\idea_rt.jar=62025:D:\idea2019\IntelliJ IDEA 2019.3.3\bin" -Dfile.encoding=UTF-8 -classpath D:\IDEA\jihe\out\production\集合;D:\IDEA\jihe\lib\javax.transaction.jar;D:\IDEA\jihe\lib\javax.servlet.jar;D:\IDEA\jihe\lib\javax.jms.jar;D:\IDEA\jihe\lib\javax.servlet.jsp.jar;D:\IDEA\jihe\lib\javax.servlet.jsp.jstl.jar;D:\IDEA\jihe\lib\javax.persistence.jar;D:\IDEA\jihe\lib\javax.ejb.jar;D:\IDEA\jihe\lib\javax.annotation.jar;D:\IDEA\jihe\lib\javax.resource.jar com.Text.AnimalDemo
40
狗吃骨头

进程已结束,退出代码 0

这就是成员方法:编译看左边,执行看右边 为什么会出现这样的情况呢? 因为成员方法有重写,成员变量没有。

多态的好处: 1.提高了程序的扩展性 2.定义方法的时候,使用父类型作为参数,将来在使用的时候,使用具体的子类型参与操作 多态的弊端: 不能使用子类的特有功能

多态中的转型 向上转型 —> 由子到父,父类引用指向子类对象 父类名 对象名 = new 子类名() 向下转型 —> 由父到子,父类引用转为子类对象 子类名 新的对象名 = (子类名)对象名


标签: jbr2w串联连接电缆

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

 锐单商城 - 一站式电子元器件采购平台  

 深圳锐单电子有限公司