java的多态实例代码 java 多态例子

什么是多态?java中如何实现多态?多态,就是重载和重写.重载发生在一个类中.重写发生在子类,意思就是子类重写父类相同名称的方法.刚学语言有的东西,不必搞得那么清楚,只有知道怎么用就行了,有的问题你要想真正把它搞得很懂,短时间是不可能的,比如说接口,没有几年工作经验你根本不可能真正理解什么是接口,甚至有的人工作四,五年也没搞明白什么是接口,不要花太多时间去搞这些不容易搞懂的问题.
重载的特性,方法名相同.返回类型,传入方法的参数不同(包括个数和类型).
重写的特性,方法名相同,返回类型,参数均相同,必须发生在子类.
1.Java语言允许某个类型的引用变量引用子类的实例 , 而且可以对这个引用变量进行类型转换 。
Animal animal=new Dog(); //引用变量animal引用一个Animal子类Dog的实例
Dog dog=(Dog)animal; //向下转型,把Animal类型转换为Dog类型
Creature creature=animal; //向上转型,把Animal类型转换为 Creature类型
animal=new Cat(); //引用变量animal引用另一个Animal子类Cat的实例
注:Creature这里指的是生物 。
2.如果把引用变量转换为子类类型,称为向下转型 , 如果把引用变量转换为父类类型,称为向上转型 。
3.在进行引用变量的类型转换时,会受到各种限制 。而且在通过引用变量访问它所引用的实例的静态属性、静态方法、实例属性、实例方法 , 以及从父类中继承的方法和属性时,Java虚拟机会采用不同的绑定机制 。
4.成员变量、静态方法按照引用变量声明的类型静态绑定;实例方法按照引用变量引用的实例动态绑定 。
例如,对于以下这段代码:
Fathers f=new Sons();
System.out.println(“f.var=” f.var);
System.out.println(“f.staticVar=” f.staticVar);
f.method();
f.staticMethod();
运行时将会输出如下结果:
f.var=FatherVar
f.staticVar=StaticFaterVar
Son method
【java的多态实例代码 java 多态例子】Static Father method
class Fathers{
String var="FatherVar";
static String staticVar="StaticFatherVar";
void method(){System.out.println("Father method");}
static void staticMethod(){System.out.println("Static Father method");}
}
class Sons extends Fathers{
String var="SonVar";
static String staticVar="StaticSonVar";
void method(){System.out.println("Son method");}
static void staticMethod(){System.out.println("Static Son method");}
String sonVar=null;
void sonMethod(){}
}
JAVA代码编写,多态第一步java的多态实例代码:创建一个父类java的多态实例代码,如Animal(动物) 类java的多态实例代码,这个方法中只有方法的定义java的多态实例代码,没有实现 。第二步java的多态实例代码:创建一个子类,如cat(猫)类,这个方法中实现父类中的所有方法,并进行重写 。
第三步:创建一个子类 , 如dog(狗)类 , 这个方法中实现父类中的所有方法,并进行重写 。
备注:多态实际上是一个父类有特定的属性,如动物有名称、年龄、所属科目,之后由子类去实现具体的,如猫 , 名称是猫,年龄是5岁,所属科目为猫科,然后狗同样有这些属性,只不过是值不同 , 这个就是一个多态的形式 。子类可以有无限多,在步骤三后面添加即可 。
JAVA多态经典例题System.out.println("1--"a1.show(b));
a1是A类引用指向A类对象,不存在多态,一定调用A类方法 。A类方法有两个show(D)和show(A),b是B类引用无法转换为D类引用 , 但可以转换为A类引用,因此调用show(A),输出A and A 。
System.out.println("2--"a1.show(c));
输出A and A,原因同上 。
System.out.println("3--"a1.show(d));
调用show(D),输出A and D 。
System.out.println("4--"a2.show(b));
a2是A类引用指向B类对象,可能存在多态 。b是B类引用无法转换为D类引用,但可以转换为A类引用,因此调用show(A),而B类重写了show(A),因此调用的是重写后的show(A) , 输出B and A 。
System.out.println("5--"a2.show(c));
同上,C类引用无法转换为D类引用,但可以转换为A类引用,因此调用show(A),输出B and A 。
System.out.println("6--"a2.show(d));
调用show(D),show(D)又调用父类即A类的show(D),输出A and D
System.out.println("7--"b.show(b));
b是B类引用指向B类对象 , 不存在多态,一定调用B类方法 。B类一共有三个方法:重写自A类的show(A)和show(D),以及新定义的show(B) 。show(b)调用show(B)方法,输出B and B
System.out.println("8--"b.show(c));
C类继承自B类,也调用show(B)方法,输出B and B
System.out.println("9--"b.show(d));
调用show(D) , show(D)又调用父类即A类的show(D),输出A and D
java里面多态怎么写的?这只是隐式类型转换,Java中的多态一般是指函数重载(简而言之是同名函数不同参数实现相似功能)、InterfaceImplemention(即接口类)、抽象类、函数覆盖
类似于:
interface C {
public abstract byte method(int i); // 4
}
abstract class B implements C {
public abstract char method(int i, int j); // 5
public void method(int i, Object obj) {}; // 6
}
class A extends F { //原类
//实现了父类所实现的接口的抽象函数
@Override
public byte method(int i) {...} // 1
//实现了父类的抽象函数
@Override
public char method(int i, int j) {...} // 2
//覆盖了父类的函数
@Override
public void method(int i, Object obj) {...} // 3
//对于第二个和第三个的方法需要显示转换
//例子:
public static void main(String[] args)
{
B obj = new A();
int x, y;
x = y = 0; // 初始化
obj.method(x, y); //调用的是2号方法
obj.method(x, (Object)y); //调用的是3号方法
C objinterface = obj;
c.method(x); //调用的是1号方法
}
}
谁能跟我说几个JAVA多态,在现实生活中应用的例子,不要说代码和概念,就只说案例有一个比较经典的多态实例:
有一个Animal类,它有Cat,和Dog两个子类,在Animal中有个say方法,当Cat调用这个方法的时候输出的是“小猫喵喵喵”,当Dog调用这个方法时,输出的是“小狗汪汪汪”,这就是Java多态的实现 。
1、定义一种动物,该类型的动物有叫的属性 。
2、分别定义猫,狗,鸟,都继承于该动物,都有叫的属性 。
3、分别表示出各个具体小动物的叫声 , 例如猫的叫声:喵、狗的叫声:汪、鸟的叫声:咻,点是叫声,实现各个具体小动物用的叫声的方法是用的同一个函数名称,就是动物的叫声函数 。
多态:
这个案例网上是没有的 , 属于无忌独创,当时在帮孩子辅导作业,小学科学,里面有一点内容是关于人的牙齿,说牙齿分为:门齿、犬齿、臼齿 。
问闺女,为什么这么分呢?闺女说牙齿虽然都是用来咬食物 , 但是食物种类很多,咬碎需要的工具也不一样 , 门齿用来切割食物,如:苹果、梨;犬齿用来撕碎食物 。
如肉类;臼齿用来磨碎食物,如犬齿撕碎的肉类 , 就需要再用臼齿来磨碎,然后送到食道,胃 , 小肠,大肠进行消化 。我恍然大悟,这不就是Java面向对象里的多态吗?多完美啊 。
这也很好说明了为什么会有多态出现,因为生活中就存在太多这种例子,所以需要多态来匹配解决 。
java的多态实例代码的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java 多态例子、java的多态实例代码的信息别忘了在本站进行查找喔 。

    推荐阅读