多态:某一类事物的多种存在形态

如:动物中的猫和狗
猫对象对象的类型是猫类型,即 cat c1= new cat()
但同时猫也是动物中的一种,也可以把猫成为动物,即 animal c1= new cat()

多态提现:父类的引用指向了自己子类对象。
                 父类的引用也可以接受自己的子类对象。

多态前提:1.必须是雷和类之前有关系,要么继承,要么实现。
     2.存在复写

多态好处:大大提高了程序的扩展性

多态弊端:只能使用父类的引用访问父类的成员

abstract class animal
{
abstract void eat();
   
} class cat extends animal
{
void eat()
{
System.out.println("cat eat");
} void say()
{
System.out.println("miu,miu");
}
} class dog extends animal
{
void eat()
{
System.out.println("dog eat");
} void say()
{
System.out.println("wang,wang");
}
} class DuoDemo1
{
public static void main(String[] args)
{
fuc(new cat());
fuc(new dog());
} static void fuc(animal a)// 多态的表现animal a=new cat();模板设计思想,把不确定的暴露出来
{
a.eat();
} }

 向上转型和向下转型:

abstract class animal
{
abstract void eat();
} class animal
{
void eat(){};
} class cat extends animal
{
void eat()
{
System.out.println("cat eat");
} void say()
{
System.out.println("miu,miu");
}
} class dog extends animal
{
void eat()
{
System.out.println("dog eat");
} void say()
{
System.out.println("wang,wang");
}
} class DuoDemo1
{
public static void main(String[] args)
{
animal a1=new cat();//多态表现,也是向上转型
//animal a2=new animal() 当animal为非抽象类,不能强制向下转型
/*千万不要出现把父类对象转换成子类类型。*/
a1.eat();
cat cl=(cat)a1;//如果子类想调用自己的特有方法,需要强制将父类的引用转换为子类类型。也叫向下转型。
cl.say();
} }

 多态中成员特点:

1) 在多态中成员函数的特点:
  在编译时期:参阅引用型变量所属的类中是否有调用的方法。如果有,编译通过,如果没有编译失败。
  在运行时期:参阅对象所属的类中是否有调用的方法。
  简单总结就是:成员函数在多态调用时,编译看左边,运行看右边。

2)在多态中,成员变量的特点:
     无论编译和运行,都参考左边(引用型变量所属的类)。

3)在多态中,静态成员函数的特点:
     无论编译和运行,都参考做左边。

class Fu
{
static int num = 6;
void method1()
{
System.out.println("fu method_1");
}
void method2()
{
System.out.println("fu method_2");
}
static void method4()
{
System.out.println("fu method_4");
}
} class Zi extends Fu
{
static int num = 8;
void method1()
{
System.out.println("zi method_1");
}
void method3()
{
System.out.println("zi method_3");
} static void method4()
{
System.out.println("zi method_4");
}
}
class DuoTaiDemo4
{
public static void main(String[] args)
{
Fu f = new Zi();
System.out.println(f.num);
f.method1();
f.method2();//多态中的成员函数运行时看右边,尽管子类没有method2方法,但是他继承了父类的method2方法,因此可以运行
//f.method3();//编译时后报错,因为多态中的成员函数编译时看左边,也就是看父类,父类没有method3方法,因此会报错
f.method4(); Zi z = new Zi();
z.method4(); }
}

【java】多态的更多相关文章

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

    学习了Java和C++之后,由于长期不使用C++,而java的基础知识掌握不牢,现在已经搞不清java多态了.现在先来谈谈java多态,稍后有时间再更新C++的多态,并进行比较~ 一. Java的多态 ...

  2. C++和java多态的区别

    C++和java多态的区别 分类: Java2015-06-04 21:38 2人阅读 评论(0) 收藏 举报  转载自:http://www.cnblogs.com/plmnko/archive ...

  3. 深入理解Java多态机制

    从字节码层面来看,Java中的所有方法调用,最终无外乎转换为如下几条调用指令. invokestatic: 调用静态方法. invokespecial: 调用实例构造器<init>方法,私 ...

  4. Java 多态 父类和子类方法的访问控制权限

    Java 多态 父类和子类方法的访问控制权限 @author ixenos 父类和子类方法的访问控制权限 继承是为了扩展类的功能,而这种扩展显然就是对一个原始类的扩展,目的还是向上转型来调用,所以这就 ...

  5. Java多态(二)

    public class ExtendsTest { public static void main(String[] args) { A a1 = new A(); A a2 = new B(); ...

  6. 从JVM角度看Java多态

    首先,明确一下,Java多态的三个必要条件: 1. 继承 2. 子类重写父类方法 3. 父类引用指向子类对象 然后看一个例子 package test.xing; class Father{ prot ...

  7. 关于java多态的理解

    要理解多态,就必须有一个大的理解方向,不然很容易绕进去. 首先知道多态的释义:多态性是指一个名词可以有多种语义. 对于java的多态性学习者来说,就是必须要知道多个同名方法在不同情况下的使用规则. j ...

  8. Java经验杂谈(2.对Java多态的理解)

    多态是面向对象的重要特性之一,我试着用最简单的方式解释Java多态: 要正确理解多态,我们需要明确如下概念:・定义类型和实际类型・重载和重写・编译和运行 其中实际类型为new关键字后面的类型. 重载发 ...

  9. 学JAVA第十六 天,JAVA多态

    今天老师讲了多态的使用 多态是同一个行为具有多个不同表现形式或形态的能力. 多态的优点: 1. 消除类型之间的耦合关系 2. 可替换性  3. 可扩充性 4. 接口性 5. 灵活性 6. 简化性 我个 ...

  10. 对java多态的理解

    java多态,如何理解父类引用指向子类对象 要理解多态性,首先要知道什么是“向上转型”. 我定义了一个子类Cat,它继承了Animal类,那么后者就是前者是父类.我可以通过 Cat c = new C ...

随机推荐

  1. cocos Studio使用问题

    使用的时候最好是同一套资源饭在一个文件夹下,或者新建的文件和资源类,一个资源分一个产生的层文件

  2. L358 World Book Day

    World Book Day is celebrated by UNESCO and other related organisations every year on the 23rd of Apr ...

  3. Java - Java入门(2-1am)

    第一讲.Java入门 1. 计算机语言是人和计算机进行交互的一种工具,人们通过使用计算机语言编写程序来向计算机施令,计算机则执行程序,并把结果输出给用户. 2. 机器语言:由0.1序列构成的指令码组成 ...

  4. <iframe> 标签 中 src 的三种形式. display , echart

    1.形式一: <iframe scrolling="yes" src="action.php?c=HLogin&a=linkPage&p=fx&qu ...

  5. 3D数学基础(二)向量

    向量的基本运算包括加法.减法.点乘.叉乘.单位化运算等,而在游戏开发中使用最为广泛的是减法.点乘.叉乘.单位化运算.向量是具有方向和长度的矢量,有2D.3D.4D等的.在游戏开发里面一般使用的是2D和 ...

  6. 使用vue.js 引用阿里图标 --无法显示(报错)

    在webpack.config.js配置文件中添加 { test: /\.(eot|svg|ttf|woff|woff2)$/, loader: 'file-loader'}

  7. 学习笔记 Optional

    今天学习到的一种新的防止空指针的方法下面是我自己写的一个例子:节省空间,bean的get set 省略... /** * 类目 * @author 唐 * @date 2018/5/6 17:45 * ...

  8. 小程序swiper指板点样式修改

    swiper(class名).wx-swiper-dots.wx-swiper-dots-horizontal{    //距离底部高度 margin-bottom: 2rpx; } swiper(c ...

  9. biaffineparser

    代码: 一.pytorch,可以直接跑 https://github.com/chantera/biaffineparser python parser.py train --out model -- ...

  10. Spring Boot 定时任务使用

    详情参考文章https://blog.csdn.net/qq_31001665/article/details/76408929