---------- android培训 、 java培训 、期待与您交流! ----------

【【多态】】

instanceof 
定义:某一种事物的多种存在形态

【【instanceof  关键字】】用于判断所属类型。

/*
 * 【【多态】】
 *    定义:某一种事物的多种存在形态
 * 人:男人、女人
 * 动物:猫、狗
 * 猫     x = new 猫;
 * 动物 x = new 猫;
 *
 * 多态强调对象上的体现,其实函数也体现出了。
 * 重点讲:对象的多态性。
 *
 * 围绕一下4点学习:
 * 1、多态的体现形式?
 *         父类的引用指向了自己的子类对象,这就是多态的体现。
 *         父类的引用也可以接收自己的子类对象。
 * 2、多态的前提?
 *         必须是类与类之间有关系,要么继续,要么实现。
 *         通常还有一个前提:存在覆盖。
 * 3、多态的好处?
 *         多态的出现,大大的提高了程序的扩展性
 * 4、多态的弊端:
 *         提高了扩展性,但只能使用父类的引用访问父类的成员。
 * 5、多态的应用?【请看Demo_Duotai3】
 * 6、多态出现在代码中的特点(多态使用的注意事项)【请看Demo_Duotai4】
 *
 */
/*
 * 需求:
 * 动物
 * 猫,狗
 */

package DayXuexi;
abstract class Animal{
    abstract void eat();
}
//猫
class Cat extends Animal{
    
    public void eat(){
        System.out.println("chi yu");
    }
    public void cathMouse(){
        System.out.println("zhua  mouse");
    }
}
//狗
class Dog extends Animal{
    public void eat(){
        System.out.println("chi gu tou");
    }
    public void kanHome(){
        System.out.println("kan Home");
    }
}

//猪
class Pig extends Animal{
    public void eat()
    {
        System.out.println("chi si liao");
    }
    public void gongDi(){
        System.out.println(" gong di");
    }
}

public class Demo_Duotai {
    public static void main(String []args){
        /*按照以往的逻辑,我们在这里想要这些东西吃东西,那么就得挨个new一次,并调用吃的方法。非常麻烦
         * 而多态的出现,则解决了这个复杂的代码:
         */
        //第一步:
        /*
        Animal a=new Cat();//[a]
        a.eat();
        Animal b=new Dog();
        b.eat();
        Animal c=new Pig();
        c.eat();
        */
        //继续优化:
        Function(new Cat());
        Function(new Dog());
        Function(new Pig());
        
        
        
    }
    public static void Function(Animal name){  //[b]  其实就是: Animal name=new Cat/Dog/Pig
        name.eat();
    }
    //否则每一个东西都要写这么一个方法进行重载,相比,多态提高了代码的扩展性。
    /*
    public static void Function(Cat c){  
        c.eat();
    }
    public static void Function(Dog d){  
        d.eat();
    }
    public static void Function(Pig p){  
        p.eat();
    }
     */
}
-------------------------------------------------------------------------------------------------------

package DayXuexi;
/*
 * 【【多态】】
 *    定义:某一种事物的多种存在形态    至始至终都是子类在做着变化。
     用多态1的例子来使用【特有方法】
 */
abstract class Animal2{
    abstract void eat();
}
//猫
class Cat2 extends Animal2{
    
    public void eat(){
        System.out.println("chi yu");
    }
    public void cathMouse(){
        System.out.println("zhua  mouse");
    }
}
//狗
class Dog2 extends Animal2{
    public void eat(){
        System.out.println("chi gu tou");
    }
    public void kanHome(){
        System.out.println("kan Home");
    }
}

//猪
class Pig2 extends Animal2{
    public void eat()
    {
        System.out.println("chi si liao");
    }
    public void gongDi(){
        System.out.println(" gong di");
    }
}

public class Demo_Duota2 {
    public static void main(String []args){
        //关键:
         Animal a=new Cat();//类型提升   这里把cat提升为Animal  也称为向上转型
         /*比如以前学习到的 byte=2; int x=b;  b就会被提升为int */
         a.eat();
        /*如果想要调用cat的特有方法时,如何操作*/
         //【强制】将父类的引用转成子类类型  【 向下转型】
         Cat c=(Cat)a;
        c.eat();
        c.cathMouse();
        /*这个时候,子类的两个方法都拥有了。

千万不要将父类对象转为子类类型。

正确的是将父类的应用指向了自己的子类对象时,该应用可以被提升,也可以被强制转换
当子类有限的时候可以用【mm】
【多态】至始至终都是子类对象在做着变化。
*/
    
        
        
    }
    public static void Function(Animal2 name){  //[b]  其实就是: Animal name=new Cat/Dog/Pig
        name.eat();
        /* 子类有限的时候才这么干。【mm】
        if(name instanceof Cat2){    
            Cat2 c= (Cat2)name;
        } else if(name instanceof Dog2){
            Dog2 d=(Dog2)name;
        } else if(name instanceof Pig2){
            Pig2 p=(Pig2)name;
        }
        */
    }

}

---------- android培训、 java培训 、期待与您交流!----------
黑马官网:http://edu.csdn.net/heima

黑马程序员_Java基础[16]_多态1相关推荐

  1. 黑马程序员_Java基础Day05_面向对象之封装(Done)

    ------- android培训.java培训.期待与您交流! ---------- Day05开始接触到了Java核心部分--"面向对象". 面向对象是一种思考思想,是相对于早 ...

  2. 黑马程序员_Java基础_前期准备02-1

    ---------------------------------------- JavaEE+云物联.期待与您交流!----------------------------------------- ...

  3. 黑马程序员_java基础笔记(15)...银行业务调度系统_编码思路及代码

    ---------- ASP.Net+Android+IOS开发..Net培训.期待与您交流!---------- 1,面试题目:银行业务调度系统 模拟实现银行业务调度系统逻辑,具体需求如下: 银行内 ...

  4. 黑马程序员_java基础笔记(03)...面向对象

    1:面向对象的概念,2 : 类和对象的关系,3 : 封装,4 : 构造函数,5 : this关键字,6 : static关键字, 7 : 单例设计模式,8 : 继承,9 : 抽象类,10 : 接口,1 ...

  5. 黑马程序员_java基础笔记(06)...集合

    ---------- ASP.Net+Android+IOS开发..Net培训.期待与您交流! ---------- JavaApi(其实就是java给我们提供的已经定义好的对象.工具对象:集合框架) ...

  6. 黑马程序员_Java基础面向对象

    ------- <a href="http://www.itheima.com" target="blank">android培训</a> ...

  7. 黑马程序员_java基础笔记(08)...GUI,网络编程,正则表达式

    GUI(Graphical User Interface)(图形用户接口):用图形的方式,来 显示计算机操作的界面,这样更方便更直观 CLI(Conmand line User Interface)( ...

  8. 黑马程序员_Java基础_this,super,static,final关键字

    一,this关键字 1,当成员变量和局部变量重名时,可以使用this关键字来区分. this关键字代表的是本类对象,this一般是在一个函数中,哪个对象在调用this所在的函数,this就代表哪个对象 ...

  9. 黑马程序员_Java基础GUI

    ------- <a href="http://www.itheima.com" target="blank">android培训</a> ...

最新文章

  1. [程序员创造力训练 1] 猜单词 - 关于健康
  2. 招聘 | 阿里巴巴搜索推荐事业部-知识图谱校招
  3. 报名中 | 微软首席人工智能科学家邀你参加一场AI领域的私密聚会
  4. 微观经济学的学习和理解
  5. java爬取网页并保存_第九讲:Python爬取网页图片并保存到本地
  6. Cortex-M0(3)---ARM Cortex-M0 异常与中断
  7. Vue 使用 v-show 失效
  8. python初级第三库(人工智能,web解析,人机交互)
  9. JAVA之旅(二十八)——File概述,创建,删除,判断文件存在,创建文件夹,判断是否为文件/文件夹,获取信息,文件列表,文件过滤...
  10. access与sqlserver数据转换
  11. 前大灯是近光灯还是远光灯_夜间上高速使用近光灯?不会开车就别开,否则12分都不够扣!...
  12. iOS官方demo下载网站
  13. 汉字unicode编码范围
  14. 获取稳定的西刺代理IP
  15. tm4c123g c语言,Tm4c123GX(tiva)入门详细教程
  16. theano学习--theano.function
  17. 张孝祥正在整理Java就业面试题大全
  18. Mstar 平台(648)唤醒之串口唤醒
  19. python实现合并多个excel中同名的sheet
  20. python掷骰子猜大小

热门文章

  1. python黑客帝国教学_Python黑科技01-实现黑客帝国电影程序版
  2. 商品期货局部极值识别判断峰值波谷
  3. 软件测试基础理论(二)
  4. java swing qq_java swing实现QQ账号密码输入框
  5. iOS 获取deviceid的方法
  6. 2020年,哪些人群适合学软件测试呢?
  7. shader入门精要读书笔记23 高级纹理-渲染纹理-镜子效果、玻璃效果
  8. 用阳光代替WiFi信号连网,沙特科学家这成果亮了
  9. 数据库索引的简单知识点
  10. 倒排文件索引(Inverted File Index)