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 //不能将毛转换成狗 } }
  • 相关阅读:
    初等数论初步——剩余类及其运算
    初等数论初步——同余的概念及性质
    救济金发放(模拟题打卡)
    寻找最小字典序字符串(水题打卡)
    杭电3790最短路径问题
    Android网络请求
    js制造运动的假象-------Day63
    数据切分——原理
    Android 开发中 iBeacon的使用
    HDU 4869 Turn the pokers (2014多校联合训练第一场1009) 解题报告(维护区间 + 组合数)
  • 原文地址:https://www.cnblogs.com/Jims2016/p/9495237.html
Copyright © 2011-2022 走看看