zoukankan      html  css  js  c++  java
  • java 多态 (知识点不完整)

    1.多态的条件

      1.要有继承

      2.方法重写

      3.父类引用指向子类对象


    多态中成员访问

      1.   访问成员变量:  编译看左边,运行也看左边

        f.num = 10 

        因为这里是父类的,看是父类Father

     1 main{
     2   Father  f = new Son( )
     3   System.out.println( f.num);
     4 }
     5 
     6 
     7 class Father {
     8     int num = 10;}
     9 
    10 class Son extends Father {
    11     int num = 20;}

      2.访问成员方法: 编译看左边,运行看右边( 子类 ) 。 动态绑定

      3.访问静态成员方法: 编译看左边,运行看左边( 父类 )

        静态和类相关,算不上重写,所以,还是和左边的父类

        因为静态是属于类的,由实例共享,所以只看当前引用变量所属的类中的静态方法。

     

     1 class Demo4_Animal {
     2     public static void main(String[] args) {
     3         //Cat c1 = new Cat();
     4         //c1.eat();
     5         method(new Cat());
     6         method(new Dog());
     7 
     8         //Animal a = new Cat();   开发的是很少在创建对象的时候用父类引用指向子类对象,直接创建子类对象更方便,可以使用子类中的特有属性和行为
     9     }
    10     
    11     //Cat c = new Dog();狗是一只猫,这是错误的
    12     /*public static void method(Cat c) {            
    13         c.eat();
    14     }
    15 
    16     public static void method(Dog d) {
    17         d.eat();
    18     }*/
    19     
    20     //如果把狗强转成猫就会出现类型转换异常,ClassCastException
    21     public static void method(Animal a) {    //当作参数的时候用多态最好,因为扩展性强
    22         //关键字 instanceof 判断前边的引用是否是后边的数据类型
    23         if (a instanceof Cat) {
    24             Cat c = (Cat)a;
    25             c.eat();
    26             c.catchMouse();
    27         }else if (a instanceof Dog) {
    28             Dog d = (Dog)a;
    29             d.eat();
    30             d.lookHome();
    31         }else {
    32             a.eat();
    33         }
    34     }
    35 }
    36 /*
    37 * A:多态的好处
    38     * a:提高了代码的维护性(继承保证)
    39     * b:提高了代码的扩展性(由多态保证)
    40 * B:案例演示
    41     * 多态的好处
    42     * 可以当作形式参数,可以接收任意子类对象
    43 * C:多态的弊端
    44     * 不能使用子类的特有属性和行为。
    45 */
    46 
    47 class Animal {
    48     public void eat() {
    49         System.out.println("动物吃饭");
    50     }
    51 }
    52 
    53 class Cat extends Animal {
    54     public void eat() {
    55         System.out.println("猫吃鱼");
    56     }
    57 
    58     public void catchMouse() {
    59         System.out.println("抓老鼠");
    60     }
    61 }
    62 
    63 class Dog extends Animal {
    64     public void eat() {
    65         System.out.println("狗吃肉");
    66     }
    67 
    68     public void lookHome() {
    69         System.out.println("看家");
    70     }
    71 }
  • 相关阅读:
    VC 6.0 编译器的使用帮助
    生成可执行jar文件(转)
    DataGridView填充、更新、删除(多行)Sql Express 2005数据库
    访问域服务器修改密码,报“未知的身份验证机制”的错误搞定!
    尝试用Word2007发布博客
    iBatisNet Tutorial
    Asp.net 技巧集合
    TableAdapter 无法插入或更新Access数据库
    OrcasBeta1 installed 玩一玩Silverlight
    Microsoft .NET Compact Framework 开发常见问题解答从msdn上找到。
  • 原文地址:https://www.cnblogs.com/gaoyang666/p/11097546.html
Copyright © 2011-2022 走看看