JAVA多态学习1

原创 2015年07月07日 15:55:10

多态–概念
所谓多态,就是指一个引用(类型)在不同情况下的多种状态。也可以理解成:多态是指通过指向父类的指针,来调用在不同子类中实现的方法。
实现多态有两种方式:1、继承;2、接口

这一次我们先来演示一下:
继承、方法覆盖、多态以及向上转型的内容

package polimorphic;

public class Polimorphic {
    public static void main(String[] args) {
        //非多态演示
        System.out.println("非多态演示:");
        Cat cat=new Cat();
        cat.cry();
        //cat=new Dog();                //类型不匹配
        Dog dog=new Dog();
        dog.cry();
        dog.bite();
        System.out.println();       
        //多态演示
        System.out.println("多态演示:");
        Animal an=new Cat();
        an.cry();
        an=new Dog();
        an.cry();
        //an.bite();                    // an虽指向子类对象,但此时丢失bite()方法
        System.out.println();   
        //多重多态演示
        System.out.println("多重多态演示:");
        Master master=new Master();
        master.feed(new Dog(),new Bone());
        master.feed(new Cat(),new Fish());
    }
}
//主人类
class Master{
    //给动物喂食物,使用多态,只要写一个方法
    public void feed(Animal an,Food f){
        an.eat();
        f.showName();
    }
}
//食物父类
class Food{
    String name;
    public void showName(){
        System.out.println("食物");
    }
}
//食物鱼子类
class Fish extends Food{
    public void showName(){                     //覆盖父类方法
        System.out.println("鱼");
    }
}
//食物骨头子类
class Bone extends Food{
    public void showName(){                     //覆盖父类方法
        System.out.println("骨头");
    }
}
//动物类Animal父类
class Animal{
    String name;
    int age;

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    //动物会叫
    public void cry(){
        System.out.println("不知道怎么叫");
    }
    //动物吃东西
    public void eat(){
        System.out.println("不知道吃什么");
    }
}
//创建Dog子类并extends继承Animal父类及覆盖cry方法
class Dog extends Animal{
    //狗叫
    public void cry(){                         //覆盖父类方法
        System.out.println("汪汪叫");
    }
    //狗吃东西
    public void eat(){                          //覆盖父类方法
        System.out.println("狗爱吃骨头");        
    }
    public void bite(){

        System.out.println("狗会咬人...");
    }
}
class Cat extends Animal{
    //猫自己叫
    public void cry(){                           //覆盖父类方法
        System.out.println("猫猫叫");
    }
    //猫吃东西
    public void eat(){                           //覆盖父类方法
        System.out.println("猫爱吃鱼");
    }
}


结果截图
polimorphic

多态–注意事项:
1、java允许父类的引用变量引用它的子类的实例(对象)
Animal an=new Cat();//这种转换时自动完成的.

转型是在继承的基础上而言的,继承是面向对象语言中,代码复用的一种机制,通过继承,子类可以复用父类的功能,如果父类不能满足当前子类的需求,则子类可以重写父类中的方法来加以扩展。

向上转型:子类引用的对象转换为父类类型称为向上转型。通俗地说就是是将子类对象转为父类对象。此处父类对象可以是接口

Animal dog 引用指向new Dog();子类对象当成父类对象,只能调用父类的成员,如果子类重写了父类的方法就根据这个引用指向调用子类重写的这个方法(这个方法就是覆盖override)。这个调用过程就称为“动态绑定”。

转型需要注意的问题:

向上转型时,父类指向子类引用对象会遗失除与父类对象共有的其他方法,也就是在转型过程中,子类的新有的方法都会遗失掉,在编译时,系统会提供找不到方法的错误。
比如:上述代码的

//an.bite();                    // an虽指向子类对象,但此时丢失bite()方法

关于类型转换还有一些具体的细节要求,我们在后面还要提,比如子类能不能转换成父类,有什么要求等等…
向下转型的问题我们下一节探讨。

Java多态学习总结

一、多态产生的条件 存在继承关系; 存在方法重写; 要有父类引用指向子类对象。 示例代码:public class PolymorphismTest { public static void...
  • liuweiballack
  • liuweiballack
  • 2015年07月29日 00:17
  • 737

Java多态 向上转型 向下转型

封装、继承、多态是面向对象的三大特征,在Java中什么是多态? Java引用变量有两种类型,分别是编译时类型和运行时类型。何为编译时类型,编译时类型就是由声明该变量时使用的类型决定,而运行时类...
  • u010695218
  • u010695218
  • 2015年03月09日 21:35
  • 1276

Java多态性理解,好处及精典实例

核心: 1、多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编译时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到...
  • Jian_Yun_Rui
  • Jian_Yun_Rui
  • 2016年10月26日 20:12
  • 9449

[java面试]关于多态性的理解

运行时多态性是面向对象程序设计代码重用的一个最强大机制,Java多态性的概念也可以被说成“一个接口,多个方法”。Java实现运行时多态性的基础是动态方法调度,它是一种在运行时而不是在编译期调用重载方法...
  • kuaisuzhuceh
  • kuaisuzhuceh
  • 2015年07月02日 14:28
  • 1649

java中实现多态的机制是什么?

面向对象编程有三大特性:封装、继承、多态。 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据。对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法。 ...
  • BornLiLi
  • BornLiLi
  • 2017年02月15日 18:31
  • 8289

JavaWeb接口的多态现实

JavaWeb接口的多态现实
  • zx520sun
  • zx520sun
  • 2016年11月04日 10:50
  • 360

java中的对于多态的理解

面向对象:      类:具体的对象抽象而来,可以抽象的表示一类具有相同特征和行为的对象      对象:是由类的实例化而来,对象是类的一个实例 java中关于多态的理解 打个比方 父...
  • woshiermingerming
  • woshiermingerming
  • 2016年08月26日 08:29
  • 7140

【超经典】Java多态有什么好处?怎样用?

多态可以分为变量的多态,方法的多态,类的多态.我这里强调的是类的多态,这是在以后的工作中经常会用到的。多态的表现形式有方法重载,方法改写,多态变量和泛型。重载是一种静态的多态性,在程序编译时确定被调用...
  • guomutian911
  • guomutian911
  • 2015年10月06日 23:05
  • 1973

Java实验5继承和多态

目的: 理解继承与多态的概念,熟练掌握使用方法   1、 设计一个数据类型判断类Polymorphism,使用重载、装箱等技术判断一个不带等号的Java表达式的结果的数据类型。 2、 设计一个...
  • u010286615
  • u010286615
  • 2014年07月02日 13:37
  • 1155

Java 多态缺陷

Java 多态缺陷 ( 1.缺陷 : “覆盖”私有方法 output:    print A private方法被自动认为是final方法,而且对子类是屏蔽的。因此,在...
  • mwq30123
  • mwq30123
  • 2014年06月04日 10:42
  • 461
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JAVA多态学习1
举报原因:
原因补充:

(最多只允许输入30个字)