zoukankan      html  css  js  c++  java
  • Java学习--多态

    1. 多态

    多态:同一个对象(实物),在不同时刻体现出来的不同状态

    多态的前提:

    A:要有继承关系

    B:要有方法重写

    C:要有父类引用指向子类对象

        父类 f = new 子类()

    多态中的成员访问特点:

    A:成员变量

    编译看左边,运行看左边

    B:构造方法

    创建子类的时候,访问父类的构造方法,对父类的数据进行初始化

    C:成员方法

    编译看左边,运行看右边

    D:静态方法

    编译看左边,运行看右边(静态和类相关,算不上重写,所以访问还是左边的)

    由于成员方法存在方法重写,所以它运行看右边

     

    多态的好处:

    1. 提高了代码的维护性(继承保证)
    2. 提高了代码的扩展性(由多态保证)

    多态的弊端:

    1. 不能使用子类的特有功能

    把父类的引用强制装换为子类的引用(向下转型)

    1.猫和狗多态练习

    class Anamial{
    
        public void eat(){
            System.out.println("动物吃");
        }
        
    }
    
    class Dog extends Anamial{
        public void eat(){
            System.out.println("狗吃骨头");
        }
        public void lookDoor(){
            System.out.println("狗看门");
        }
    }
    
    class Cat extends Anamial{
        public void eat(){
             System.out.println("猫吃鱼");
        }
        public void play(){
             System.out.println("狗玩游戏");
        }
        
    }
    
    class ExtendsDemo{
        public static void main(String[] args){
            System.out.println("Extends ");
            //定义动物为狗
            Anamial a = new Dog();
            a.eat();
            //a.lookDoor(); 编译会报错,动物没有狗的方法
            //将动物还原成狗
            Dog d = (Dog)a;
            d.eat();
            d.lookDoor();
            
    //a变成猫 a
    = new Cat(); a.eat(); //a.play(); 编译会报错,动物没有play方法 //将动物还原为狗 Cat c = (Cat)a; c.eat(); c.play(); //Dog dd = (Dog)a; 编译不会报错,运行报错 java.lang.ClassCastException: Cat cannot be cast to Dog //不能将毛转换成狗 } }
  • 相关阅读:
    InnoSetup 打包代码 检测.netFramework
    PartialView中的页面重定向
    Cocos2dx 学习之引擎介绍
    30个高质量的免费jquery滑块PSD文件
    HBase Shell
    图灵百年诞辰 1912.6.232012.6.23
    常用的数据分页技术及比较
    Cocos2dx学习之windows 7的visual studo 2010开发环境安装
    C#实现简易ajax调用后台方法
    AJAX(Professional ASP.NET MVC 3
  • 原文地址:https://www.cnblogs.com/Jims2016/p/9495237.html
Copyright © 2011-2022 走看看