JAVA多态学习1

多态–概念

所谓多态。就是指一个引用(类型)在不同情况下的多种状态。

也能够理解成:多态是指通过指向父类的指针,来调用在不同子类中实现的方法。

实现多态有两种方式: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("猫爱吃鱼");
    }
}

结果截图

多态–注意事项:

1、java同意父类的引用变量引用它的子类的实例(对象)

Animal an=new Cat();//这样的转换时自己主动完毕的.

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

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

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

转型须要注意的问题:

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

比方:上述代码的

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

关于类型转换另一些详细的细节要求,我们在后面还要提,比方子类能不能转换成父类,有什么要求等等…

向下转型的问题我们下一节探讨。

时间: 2024-10-28 15:27:53

JAVA多态学习1的相关文章

JAVA多态学习4

好啦,说好的这一节要开讲接口了,嘿嘿,还是老样子,读者最好借助之前说的抽象类进行比较喔O(∩_∩)O哈哈~ 什么是接口? 接口就是给出一些没有内容的方法,封装到一起,到某个类要使用的时候,在根据具体情况把这些方法写出来. 接口的建立语法:interface 接口名{方法;} 语法:class 类名 implements 接口{ 方法; 变量; } 小结:接口是更加抽象的抽象的类,抽象类里的方法可以有方法体,接口里的所有方法都没有方法体.接口体现了程序设计的多态和高内聚低偶合的设计思想. 接口–注

JAVA多态学习3

这一节我们来学习抽象类 抽象类–深入讨论 抽象类是java中一个比较重要的类. 1.用abstract关键字来修饰一个类时,这个类就是抽象类. 2.用abstract关键字来修饰一个方法时,这个方法就是抽象方法. 3.abstract抽象类中的abstract抽象方法是不允许在抽象类中实现的,一旦实现就不是抽象方法和抽象类了.abstract抽象方法只能在子类中实现. 4.抽象类中可以拥有实现方法. 5.抽象方法在编程中用的不是很多,但是在公司笔试时,却是考官比较爱问的知识点. 抽象类–注意事项

JAVA多态学习2

好啦,这里紧接着上次没说的向下转型,请读者结合上次讨论的向上转型的例子一起探讨(其实本次代码也有加上,放心). 我们这里希望从向下转型会出现的两种基本情况进行探讨 package downcasting; //动物类Animal父类 class Animal{ String name; int age; public String getName() { return name; } public void setName(String name) { this.name = name; } p

Java基础学习191221(可变参数,数组,Array类,稀疏数组,继承重写多态,抽象类,接口)

Java基础学习 可变参数 在方法声明中,在指定参数类型后加一个省略号(...). 一个方法中只能指定一个可变参数,它必须是方法的最后一个参数.任何普通参数都必须在它之前声明. public class printMax { public static void main(String[] args) { printMax(1,5,8,78,415,15); } public static void printMax( double... numbers){ if (numbers.length

Java基础学习总结--多态

一.面向对象的三大特性:封装.继承.多态 ? 从一定角度来看,封装和继承几乎都是为多态而准备的. 二.什么是多态? ? 指允许不同类的对象对同一消息做出响应.即同一消息可以根据发送对象的不同而采用多种不同的行为方式.(发送消息就是函数调用) 三.实现多态的技术以及三个必要条件: ? 实现多态的技术称为:动态绑定(dynamic binding),是指在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法. 三个必要条件: 继承 重写 父类引用指向子类对象 四.多态的作用.好处.类型

java基础学习总结(一)

经过了半个月时间的学习,对java这门语言也有了比以前更深刻的认识,取经之路还相当漫长,希望通过即时的总结了解自己学习的状况. 近期基本上都是学习的java的一些基本语法,比如数据类型.运算符.程序流程控制.数组,也在逐渐上升到面向对象编程这一概念. 而java最核心的核心就是面向对象思想,只要能够掌握好面向对象这一核心概念,基本上java的学习就算入门了. java所有的对象都存在于它所属的类.而每个类都有它自身的属性和方法,我们通过对对象的属性和方法的归纳将特定的对象归为一类.我们只需要建立

java基础学习——对面向对象的重识

最近几天在看java的视频,感觉很多东西java语法上很像c#,但是还是有很多内容惊到我: 1,java虚拟机 用过VMWar或者VirtualBox的童鞋都对"虚拟机"这个词有个大致的了解,虚拟机提供了个虚拟的平台,让我们可以模拟一些脱离硬件的环境.java里的虚拟机起到了一个类似以前学过的ODBC驱动程序的作用,它屏蔽了底层的差异,让操作系统通过虚拟机向下面看去,操作系统的感觉都是一样的. 有了这一层东西,我们彻底解开了底层硬件和运行操作系统之间的耦合,实现了一次编译,到处运行的梦

Java 多态——与C++的比较

学习了Java和C++之后,由于长期不使用C++,而java的基础知识掌握不牢,现在已经搞不清java多态了.现在先来谈谈java多态,稍后有时间再更新C++的多态,并进行比较~ 一. Java的多态 首先什么是Java的多态? 多态是同一个行为具有多个不同表现形式或形态的能力.多态就是同一个接口,使用不同的实例而执行不同操作. 实现多态的技术称为:动态绑定(dynamic binding),是指在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法. 多态的作用:消除类型之间的耦

java JDK8 学习笔记——助教学习博客汇总

java JDK8 学习笔记——助教学习博客汇总 1-6章 (by肖昱) Java学习笔记第一章——Java平台概论 Java学习笔记第二章——从JDK到IDEJava学习笔记第三章——基础语法Java学习笔记第四章——认识对象 Java学习笔记第五章——对象封装 Java学习笔记第六章——继承与多态 7-10.12.14章 (by吴子怡) Java学习笔记JDK8>学习总结 11.13.15-18章 (by宋宸宁) 第11章 第13章第15章第16章第17章第18章