面向对象——多态

多态的概述及实现

1、概述:事物存在的多种形态

2、多态的前提

(1)要有继承关系

(2)要有方法重写

(3)要有父类引用指向子类对象

3、案例

public static void main(){
        Cat c = new Cat();
         c.eat();

         Anmal a = new Cat();       //父类引用指向子类对象
         a.eat();                         //运行结果:猫吃鱼
}

class Animal{
       public void eat(){
           System.out.println("动物吃饭");
         }  
}

class Cat extends Animal{
        public void eat(){
             System.out.printlc("猫吃鱼");
         }
}

4、多态的成员访问特点之成员变量

编译看父类,运行看父类

public static void main(String[ ] args){
       Father f = new Son();           //父类引用指向子类对象
       System.out.println(f.num);

Son s = new Son();
System.out.println(s.num); }
/* 成员变量 */ class Father{ int num = 10; } class Son extends Father{ int num = 20; }

5、多态中的成员访问特点之成员方法

编译看父类,运行看子类

public static void main(String[ ] args){
         Father f = new Son();
          f.print();
}

class Father{
     int num = 10;
     public void print(){
        System.out.println("Father");  
       }
}

class Son extends Father{
          public void print(){
              System.out.println("Son");
}
}

6、多态的成员访问特点之静态成员方法

(1)编译看父类,运行看父类

(2)只有非静态的成员方法,编译看左边,运行看右边

public static void main(String[ ] args){
         Father f = new Son();
          f.method();          //相当于是Father.method()
}

class Father{
     int num = 10;
     public void print(){
        System.out.println("Father");  
       }
}

public static void method(){
         System.out.println("father static method");
}

class Son extends Father{
            int num = 20;
          public void print(){
              System.out.println("Son");
         }
}

 7、案例

public static void main(String[] args) {
        Person p =new SuperMan();      //父类引用指向子类对象,超人提升为了人
        System.out.println(p.name);
        p.谈生意();        
    }

}

class Person{
    String name = "John";
    public void 谈生意() {
        System.out.println("谈生意");
    }
}

class SuperMan extends Person{
    String name = "superman";
    
    public void 谈生意() {
        System.out.println("谈几个亿的大单子");
    }
    
    public void fly() {
        System.out.println("飞出去救人");
    }
}

8、多态中向上转型和向下转型

public static void main(String[] args) {
        Person p =new SuperMan();      //父类引用指向子类对象,超人提升为了人
        //父类引用指向子类对象就是向上转型
        System.out.println(p.name);
        p.谈生意();        
        SuperMan sm = (SuperMan)p;  //向下转型
        
        /*
         * 基本数据类型:自动类型提升和强制类型转换
         */
        int i = 10;
        byte b = 20;
        //i = b;   //自动类型提升
        //b = (byte)i;   //强制类型转换
    }

9、多态的好处和弊端

(1)好处

提高了代码的维护性(继承保证)

提高了代码的扩展性(由多态保证)

(2)弊端

不能使用子类的特有属性和行为

 

posted @ 2019-04-15 10:45  LC97  阅读(172)  评论(0编辑  收藏  举报