• Java中多态相关知识点


    多态

    1.多态概述

    同一个对象在不同时刻表现出的不同形态

    多态的前提和体现:

    • 有继承/实现关系
    • 有方法重写
    • 有父类引用指向子类对象(Animal a = new Cat();)

    2.多态中的成员访问特点

    • 成员变量:编译看左边,执行看右边
    • 成员方法:编译看左边,执行也看左边

    为什么成员变量和成员方法的访问不一样呢?

    • 因为成员方法有重写,而成员变量没有.

    示例:

    父类

    package com.itheima_06;
    
    public class Animal {
        public int age = 40;
    
        public void eat(){
            System.out.println("动物吃东西");
        }
    }
    

    子类

    package com.itheima_06;
    
    public class Cat extends Animal {
        public int age = 10;
        public int weight = 15;
    
        @Override
        public void eat() {
            System.out.println("猫吃鱼");
        }
    
        public void playGame(){
            System.out.println("猫捉迷藏");
        }
    }
    

    测试类

    package com.itheima_06;
    
    public class AnimalDemo {
        public static void main(String[] args) {
            //有父类引用指向子类对象
            Animal a = new Cat();
    
            System.out.println(a.age);
           // System.out.println(a.weight);         报错      成员变量编译和运行都看左边
            a.eat();            //多态中的成员方法,编译看左边,运行看右边
            //a.playGame();     报错
        }
    }
    

    3.多态的好处和弊端

    多态的好处:提高了程序的扩展性

    集体体现:定义方法的时候,使用父类型作为参数,将来在使用时,使用具体的子类型参与操作

    多态的弊端:不能使用子类的特有功能

    //动物操作类
    public class AnimalOperator {
        /*
            public void useAnimal(Cat c){
                c.eat();
            }
    
            public void useAnimal(Dog d){
                d.eat();
            }
    
         */
        //传入的参数采用Animal就不用每次新建一个类就为他新定义一个方法
        public void useAnimal(Animal a) {
            //Animal a = new Cat();
            //Animal a = new Dog();
            a.eat();
        }
    }
    
    //测试类
    public class AnimalDemo {
        public static void main(String[] args) {
            //创建动物操作类的对象,调用方法
            AnimalOperator animalOperator = new AnimalOperator();
            Cat c = new Cat();
            animalOperator.useAnimal(c);
    
            Dog d = new Dog();
            animalOperator.useAnimal(d);
        }
    }
    

    4.多态中的转型

    • 向上转型
    • 向下转型
    public class AnimalDemo {
        public static void main(String[] args) {
            //向上转型
            Animal a = new Cat();
            a.eat();
            //不能调用子类的特有方法play()
            
            //向下转型
            Cat c = (Cat)a;
            //可以调用子类中的特有方法play了
            c.play();
        }
    }
    
  • 相关阅读:
    Silverlight Quick Starts 翻译(一):目录
    CodeSmith实战(一):生成实体层
    Silverlight Quick Starts翻译(三) 已经有人翻译了
    ten sentences(110)
    SilverLight1.1 之旅(二):添加事件
    [Map 3D开发实战系列] Map Resource Explorer 之七 查看资源内容及资源引用
    欧特克AU中国“大师汇”在线会场 AU China Virtual上线
    Autodesk Topobase 2011 Update 1 – released!
    2010 Autodesk 开发者日即将召开,请速注册!
    云计算时代,你还在观望吗?亚马逊AWS和MapGuide
  • 原文地址:https://www.cnblogs.com/icyhblog/p/14110603.html
Copyright © 2020-2023  润新知