多态:

子类重写父类方法
 1)位置:子类和父类中有同名的方法
 2)方法名相同,返回类型和修饰符相同,参数列表相同
       方法体不同

多态的优势和应用场合
 多态:同一个引用类型,使用不同的实例而执行不同的操作

方法重载也是多态的一种体现.
人的不同肤色不是多态
多态的终极目标:
为了实现统一调用。
多态的两种方式:
多态一:
 父类普通类  方法a()

子类普通继承父类 方法a()

多态二:
父类的抽象类 方法是抽象方法a()

子类普通实现 抽象类 重写了抽象方法a()

instanceof 用来判断一个对象是否属于一个类或者实现了一个接口
简单工厂:
通过工厂类 创建子类对象 保存到父类的类型中

   ■多态可以减少类中代码量
   ·可以提高代码的可扩展性和可维护性
   ■向上转型一子类转换为父类,
   ·自动进行类型转换
   ■向下转型一父类转换为子类,
   ·结合instanceof运算符进行强制类型转换

例子:

父类:Pet
package cn.javaoppDay01; public abstract class Pet {
public String name;
public int health=;
public int love=;
public Pet(String name) {
super();
this.name = name;
}
public void print(){
System.out.println("我的名字是"+this.name+"健康值"+this.health+"亲密度"+this.love);
}
public abstract void eat();
}
package cn.javaoppDay01;

狗狗类:Dog
public class Dog extends Pet { public Dog(String name) {
super(name);
// TODO Auto-generated constructor stub
}
@Override
public void eat() { }
public void catchingFlyDisc(){
System.out.println("狗狗"+super.name+"正在接飞盘");
super.health =super.health-;
super.love =super.love+;
System.out.println("狗狗的健康值为:"+this.health+",亲密值为:"+this.love); } }
package cn.javaoppDay01;

public class Penguin extends Pet{
企鹅类:Penguin
public Penguin(String name) {
super(name);
// TODO Auto-generated constructor stub
}
@Override
public void eat() { }
public void swimming(){
System.out.println("企鹅"+super.name+"正在游泳");
super.health =super.health-;
super.love =super.love+;
System.out.println("企鹅的健康值为:"+this.health+",亲密值为:"+this.love); } }
测试类:
package cn.javaoppDay01; public class Test { public static void main(String[] args) {
// TODO Auto-generated method stub Dog dog=new Dog("啊啊");
dog.catchingFlyDisc();
Penguin penguin=new Penguin("哈哈");
penguin.swimming();
} }

instanceof运算符的使用

 作用:用来判断一个对象是否属于一个类或者实现一个接口

 类型转换比较
     1.
   子类转换父类
   向上转型
   自动转换
     2.
   父类转换子类
   向下转型
   使用isntanceof用作比较判定
   子类 对象名 = (子类)父类;
   使用子类对象

例子:

父类:
/**
*父类 宠物类
*/
public class Pet {
public void eat(){
System.out.println("pet正在吃");
}
}
Cat:猫类
public class Cat extends Pet {
public void eat(){
System.out.println("猫吃猫粮");
} public void ball(){
System.out.println("猫玩球");
}
}
子类:
狗狗类 :
/**
*子类:狗狗类
*/
public class Dog extends Pet{
public void eat(){
System.out.println("狗狗吃狗粮");
} public void catchFlyDisk(){
System.out.println("狗狗玩飞盘");
}
}
子类:
企鹅类:
/** *企鹅类
*/
public class Penguin extends Pet{
public void eat(){
System.out.println("企鹅吃鱼");
} public void swiming(){
System.out.println("企鹅游泳");
}
主人类
/**
*主人类
*/
public class Master { public void feed(Pet pet){
pet.eat();
} //领养宠物 多态形式3:父类作为方法返回值,子类实例化 类型自动转换
public Pet getPet(int typeid){
Pet pet=null;
if(typeid==){
pet=new Dog();
}
else if(typeid==){
pet=new Penguin();
}
else if(typeid==)
{
pet=new Cat();
}
return pet;
}
//主人和宠物玩耍的行为
public void play(Pet pet){
if (pet instanceof Dog) {
Dog dog=(Dog)pet;//向下转型
dog.catchFlyDisk();
}else if(pet instanceof Penguin){
Penguin peng=(Penguin)pet;
peng.swiming();
}else if(pet instanceof Cat){
Cat cat=(Cat)pet;
cat.ball();
} } }
测试类:
public class Test { /**
*
*/
public static void main(String[] args) {
//多态的形式1
Dog dog=new Dog(); Penguin peng=new Penguin(); Cat cat=new Cat();
Master ms=new Master();
ms.feed(dog);
ms.feed(peng);
ms.feed(cat); //多态的形式2:父类做类型,子类实例化
Pet pet=new Dog();//自动转换
pet.eat(); //调用领养宠物 形式3:父类作为方法的返回类型
System.out.println("请选择您要领养的宠物:(1-狗狗 2-企鹅 3-猫) ");
Scanner input=new Scanner(System.in);
int xz=input.nextInt();
Master dx=new Master();
Pet pets=dx.getPet(xz);
pets.eat(); dx.play(dog); } }

Java面向对象的三大特性之一 多态的更多相关文章

  1. Java学习笔记二十五:Java面向对象的三大特性之多态

    Java面向对象的三大特性之多态 一:什么是多态: 多态是同一个行为具有多个不同表现形式或形态的能力. 多态就是同一个接口,使用不同的实例而执行不同操作. 多态性是对象多种表现形式的体现. 现实中,比 ...

  2. 3.java面向对象编程三大特性之多态

    面向对象编程的三大特性:封装.继承.多态 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对类的外部而言它的内部实现细节是隐藏的,暴露给外界的只是它的实现方法. ...

  3. Java基础-面向对象第三大特性之多态(polymorphism )

    Java基础-面向对象第三大特性之多态(polymorphism) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.多态概述 多态是继封装,继承之后,面向对象的第三大特性,多态的 ...

  4. 谈谈Java面向对象的三大特性

    Java面向对象的三大特性就是指封装.继承.多态了. 一.封装: 概念:封装是指隐藏对象的属性和实现细节,仅对外提供公共访问方式. (举例:笔记本电脑就是一个封装体,Java语言中最小的封装体就是函数 ...

  5. Java学习笔记十八:Java面向对象的三大特性之封装

    Java面向对象的三大特性之封装 一:面向对象的三大特性: 封装 继承 多态   二:封装的概念: 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访 ...

  6. Java学习笔记二十一:Java面向对象的三大特性之继承

    Java面向对象的三大特性之继承 一:继承的概念: 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类. 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方 ...

  7. java面向对象的三大特性

    1.面向对象的三大特性 继承.封装.多态 什么是继承? ①继承是面向对象程序设计能够提高软件开发效率的重要原因之一. ②继承是具有传递性的,就像现实中孙子不仅长得像爸爸而且还像他爷爷. ③继承来的属性 ...

  8. Java 面向对象的三大特性之一 继承

    继承: Java是继承的三大特性之一,是Java中实现代码重用的手段之一 将重复的代码抽取到父类中继承的有点或者现实 优点: 方便修改代码 减少代码量 Java中继承的语法: 修饰符 SubClass ...

  9. java面向对象的三大特性——多态

    多态 所谓多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底 ...

随机推荐

  1. Within K stops 最短路径 Cheapest Flights Within K Stops

    2018-09-19 22:34:28 问题描述: 问题求解: 本题是典型的最短路径的扩展题,可以使用Bellman Ford算法进行求解,需要注意的是在Bellman Ford算法的时候需要额外申请 ...

  2. (转)C# 单例模式

    文章1:  一.多线程不安全方式实现 public sealed class SingleInstance    {        private static SingleInstance inst ...

  3. ggplot2画图

    早在N年前就听说这个包画图不错,一直没机会用,终于等到了.相比前面trendline这个包的可视化功能强大得多. ggplot2需要使用dataframe,其实就是一个N维数组, install.pa ...

  4. highly variable gene | 高变异基因的选择 | feature selection | 特征选择

    在做单细胞的时候,有很多基因属于noise,就是变化没有规律,或者无显著变化的基因.在后续分析之前,我们需要把它们去掉. 以下是一种找出highly variable gene的方法: The fea ...

  5. Alibaba Java诊断工具Arthas之快速安装和简单使用

    Alibaba Java诊断工具Arthas简单介绍 : 当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决: 1.这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception ...

  6. You Don't Know JS: Scope & Closures (附加:Lexical/dynamic作用域)(附加:Lexical-this)

    JavaScript只有Lexical Scope 模式 Lexical Scope就是在写代码的时候,定义函数的时候创建的作用域! 而动态作用域是在runtime时,函数被调用的地方的作用域! 实际 ...

  7. (未完成👃)You Don't Know JS: Scope & Closures (第5章: Scope & Closures)

    Chapter 5: Scope Closure 我们到达这里时,已经对作用域如何工作有了非常健康稳固的理解. 下面,我们转移注意力到一个及其重要,但长期难以理解,几乎是神话中的部分语言:Closur ...

  8. 矩阵最优路线DP

    母题:矩阵中每个点有权值,每经过一个点就累加权值,求从a点到b点的最优(最大)路线. 题型1: 从左上到右下,只能向下或者向右 for 行 for 列 dp=max dp左,dp上; 扫一遍就行 有时 ...

  9. anaconda安装tensorflow

    1.下载anaconda python3.5版本,Windows不支持python3.6,linux和mac支持python2.7和python3.3+ 2.创建环境   conda create - ...

  10. nyoj-1250-exgcd

    机器人 时间限制:1000 ms  |  内存限制:65535 KB 难度:4   描述 Dr. Kong 设计的机器人卡尔非常活泼,既能原地蹦,又能跳远.由于受软硬件设计所限,机器人卡尔只能定点跳远 ...