/*

对象的多态性。

class 动物
{}

class 猫 extends 动物
{}

class 狗 extends 动物
{}

猫 x = new 猫();

动物 x = new 猫();//一个对象,两种形态。

猫这类事物即具备者猫的形态,又具备着动物的形态。
这就是对象的多态性。

简单说:就是一个对象对应着不同类型.

多态在代码中的体现:
 父类或者接口的引用指向其子类的对象。

多态的好处:
 提高了代码的扩展性,前期定义的代码可以使用后期的内容。

多态的弊端:
 前期定义的内容不能使用(调用)后期子类的特有内容。

多态的前提:
 1,必须有关系,继承,实现。
 2,要有覆盖。

*/

abstract class Animal
{
 abstract void eat();

}

class Dog extends Animal
{
 void eat()
 {
  System.out.println("啃骨头");
 }
 void lookHome()
 {
  System.out.println("看家");
 }
}

class Cat extends Animal
{
 void eat()
 {
  System.out.println("吃鱼");
 }
 void catchMouse()
 {
  System.out.println("抓老鼠");
 }
}

class Pig extends Animal
{
 void eat()
 {
  System.out.println("饲料");
 }
 void gongDi()
 {
  System.out.println("拱地");
 }
}

class DuoTaiDemo
{
 public static void main(String[] args)
 {
  
//  Cat c = new Cat();
//  c.eat();
//  c.catchMouse();

Animal a = new Cat(); //自动类型提升,猫对象提升了动物类型。但是特有功能无法s访问。
       //作用就是限制对特有功能的访问。
       //专业讲:向上转型。将子类型隐藏。就不用使用子类的特有方法。

//  a.eat();

//如果还想用具体动物猫的特有功能。
  //你可以将该对象进行向下转型。
//  Cat c = (Cat)a;//向下转型的目的是为了使用子类中的特有方法。
//  c.eat();
//  c.catchMouse();

//  注意:对于转型,自始自终都是子类对象在做着类型的变化。
//  Animal a1 = new Dog();
//  Cat c1 = (Cat)a1;//ClassCastException

/*
  Cat c = new Cat();

//  Dog d = new Dog();

//  c.eat();
  method(c);
//  method(d);
//  method(new Pig());
  */

method(new  Dog());

}

public static void method(Animal a)//Animal a = new Dog();
 {
  a.eat();

if(a instanceof Cat)//instanceof:用于判断对象的具体类型。只能用于引用数据类型判断
//      //通常在向下转型前用于健壮性的判断。

{
   Cat c = (Cat)a;
   c.catchMouse();
  }
  else if(a instanceof Dog)
  {
   Dog d = (Dog)a;
   d.lookHome();
  }
  else
  {
  
  }
  
 }
 /*
 public static void method(Cat c)
 {
  c.eat();
 }
 public static void method(Dog d)
 { 
  
 }
 */ 
}

java 多态的好处的更多相关文章

  1. Java基础进阶:多态与接口重点摘要,类和接口,接口特点,接口详解,多态详解,多态中的成员访问特点,多态的好处和弊端,多态的转型,多态存在的问题,附重难点,代码实现源码,课堂笔记,课后扩展及答案

    多态与接口重点摘要 接口特点: 接口用interface修饰 interface 接口名{} 类实现接口用implements表示 class 类名 implements接口名{} 接口不能实例化,可 ...

  2. java8-3 多态的好处和弊端以及多态的理解

    多态的好处: A:提高了代码的维护性(继承保证) B:提高了代码的扩展性(由多态保证) 猫狗案例代码 class Animal { public void eat(){ System.out.prin ...

  3. java多态 -- 猫狗案列

    我们用猫狗案例来表明在java中使用多态的好处: class Animal{ public Animal(){} public void eat(){ System.out.println(" ...

  4. java多态的理解----部分非原创

    所谓多态,其实就是对于同一件事情,不同的对象要采取不同的行为,或者同一个对象在不同的情况下需要采取不同的行为方式. 不同的对象要采取不同的行为: 这有两种实现方式:接口实现和子类重新父类方法.这两种实 ...

  5. Java多态总结

    面向对象的三大特性:封装.继承.多态.从一定角度来看,封装和继承几乎都是为多态而准备的.这是我们最后一个概念,也是最重要的知识点. 1.定义: 多态:指允许不同类的对象对同一消息做出响应.即同一消息可 ...

  6. 09-02 java 多态

    多态的前提.多态的特点 /* 多态:同一个对象(事物),在不同时刻体现出来的不同状态. 举例: 猫是猫,猫是动物. 水(液体,固体,气态). 多态的前提: A:要有继承关系. B:要有方法重写. 其实 ...

  7. 类与接口(五)java多态、方法重写、隐藏

    一.Java多态性 面向对象的三大特性:封装.继承.多态. 多态的类型,分为以下两种: 编译时多态: 指的是 方法重载.编译时多态是在编译时确定调用处选择那个重载方法,所以也叫 静态多态,算不上真正的 ...

  8. java多态 以及静态绑定 动态绑定积累

    重载,英文名是overload,是指在一个类中定义了一个以上具有相同名称的方法,这些方法的参数个数.参数类型和顺序不能相同.返回类型可以相同,也可以不同. 重写,英文名是overrid,是指在继承情况 ...

  9. Java-Runoob-面向对象:Java 多态

    ylbtech-Java-Runoob-面向对象:Java 多态 1.返回顶部 1. Java 多态 多态是同一个行为具有多个不同表现形式或形态的能力. 多态就是同一个接口,使用不同的实例而执行不同操 ...

随机推荐

  1. java基础之hashcode理解及hashmap实现原理及MD5

    HashCode值 1. hashcode值是int的,64位.int hashCode(). 2. java object类默认的hashcode()计算方法是根据对象的内存地址来计算的.所以可由此 ...

  2. 用Redis实现分布式锁以及redission使用

    原文:https://my.oschina.net/wangnian/blog/668830 前言:分布式环境有很多问题,比如你前一个请求访问的是服务器A,第二个请求访问到了服务器B,就会发生并发重复 ...

  3. java转换emoji表情

    /** * @Description 将字符串中的emoji表情转换成可以在utf-8字符集数据库中保存的格式(表情占4个字节,需要utf8mb4字符集) * @param str * 待转换字符串 ...

  4. extjs表单验证

    extjs表单验证 //放在onReady的function(){}中 Ext.QuickTips.init(); //为组件提供提示信息功能,form的主要提示信息就是客户端验证的错误信息. Ext ...

  5. freetype

    FreeType编译及使用心得收藏   FreeType是一款字体服务库,它支持多种字体,并且提供高效,高质量的文字. freetype相关介绍见:http://blog.csdn.net/ganxi ...

  6. python笔记29-队列Queue

    前言 Python的Queue模块提供一种适用于多线程编程的FIFO实现.它可用于在生产者(producer)和消费者(consumer)之间线程安全(thread-safe)地传递消息或其它数据,因 ...

  7. Linux车载系统的开发方向

    眼下Linux基金会推出了基于Tizen 开源的车载系统平台Automotive Grade Linux (AGL), 眼下早期版本号的AGL已提供下载. UI用HTML5和JavaScript编程. ...

  8. JAVA nio 2 和 Path 类简介

    想要初步了解 NIO.2 API,也就是通常所说的“JSR203: More New I/O APIs for the Java Platform”,最好的切入点就是新的抽象类 java.nio.fi ...

  9. Linux 提权常用命令集

    转载:http://www.myhack58.com/Article/html/3/8/2017/83236.htm 0x00 操作系统相关 操作系统类型版本 cat /etc/issue cat / ...

  10. java中需要用equals来判断两个字符串值是否相等

    在C++中,两个字符串比较的代码可以为: (string1==string2) 但在java中,这个代码即使在两个字符串完全相同的情况下也会返回false Java中必须使用string1.equal ...