/*

对象的多态性。

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. MVC到底使用哪种方式传递Model,在ViewData、ViewBag、PartialView、TempData、ViewModel、Tuple之间取舍

    在"MVC控制器传递多个Model到视图,使用ViewData, ViewBag, 部分视图, TempData, ViewModel, Tuple"中,体验了使用不同的方式传递多 ...

  2. MVC中使用CKEditor01-基础

    本篇体验在MVC中使用CKEditor,仅仅算思路.基础,暂没有把验证等与CKEditor结合在一起考虑. □ 1 使用NUGET引入CKEditorPM> Install-Package CK ...

  3. Java 8 的新特性和改进总览

    这篇文章是对Java 8中即将到来的改进做一个面向开发者的综合性的总结,JDK的这一特性将会在2013年9月份发布. 在写这篇文章的时候,Java 8的开发工作仍然在紧张有序的进行中,语言特新和API ...

  4. POPSpring动画参数详解

    POPSpring动画参数详解 效果 源码 https://github.com/YouXianMing/Animations // // POPSpringParameterController.m ...

  5. ngx_lua实现登录逻辑

    最近在公司做一个简单的portal,本来很简单的,只用ngx_lua就可以实现所有的业务逻辑,不需要upstream上游服务.但被要求接入公司内部的用户校验系统,说白了就是一个登录过程,只允许公司内部 ...

  6. 解决kylin sync table报错:MetaException(message:java.lang.ClassNotFoundException Class org.apache.hive.hcatalog.data.JsonSerDe not found

    在kylin-gui中sync表default.customer_visit时报错: -- ::, ERROR [http-bio--exec-] controller.BasicController ...

  7. CVPR 2015 papers

    CVPR2015 Papers震撼来袭! CVPR 2015的文章可以下载了,如果链接无法下载,可以在Google上通过搜索paper名字下载(友情提示:可以使用filetype:pdf命令). Go ...

  8. Insertion Sort List Leetcode java

    题目: Sort a linked list using insertion sort. 题解: Insertion Sort就是把一个一个元素往已排好序的list中插入的过程. 初始时,sorted ...

  9. OkHttp 官方Wiki之【使用案例】

    原文位置:https://github.com/square/okhttp/wiki/Recipes Recipes 食谱/知识点清单 We've written some recipes that ...

  10. JS中应用正则表达式转换大小写

    JS中应用正则表达式转换大小写,代码很简单,看代码: 以下首字母大写,其它字母小写 <script type="text/javascript"> function r ...