专业的JAVA编程教程与资源

网站首页 > java教程 正文

polymorphism多态-java三大特性(java多态的特性)

temp10 2024-09-27 02:58:24 java教程 6 ℃ 0 评论

/**

* 测试多态 polymorphism 方法的多态

polymorphism多态-java三大特性(java多态的特性)

*/

public class TestPolymorphism {

void eat(){

System.out.println("各国人的吃饭方式");

//父类的方法

}

}

class Chinese extends TestPolymorphism{

void eat(){

System.out.println("用筷子");

//子类重写

}

void drink(){

System.out.println("喝茶");

}

}

class American extends TestPolymorphism{

void eat(){

System.out.println("用叉子");

}

}

class TestPoly{

static void pe(TestPolymorphism p){

//静态方法属于类,在类内可直接调用,不依附于对象名.

p.eat();

}

public static void main(String[] args) {

pe(new TestPolymorphism());

//new一个父类对象,调用父类的eat

pe(new Chinese());

//new一个子类对象 (形参)p = new Chinese() 父类引用p 指向子类对象Chinese() 称为向上转型

//执行p.eat()时 p指向子类对象 变成子类对象.eat()

pe(new American());

//父类引用p(形参)指向父类或不同的子类 调用各自重写的方法 形成多态

TestPolymorphism p1 = new Chinese();

p1.eat();

//执行时p1指向子类对象 变成子类对象.eat()

//无法调用p1.drink(); 首先判定父类p1.drink() 父类没有drink方法 此时还没到p1指向子类对象的步骤

//TestPolymorphism p1为编译类型 new Chinese()为运行时类型

//父类引用变量p1只能调用编译类型TestPolymorphism的方法 不能调用运行时类型Chinese的方法

TestPolymorphism p2 = new Chinese();

//父类引用p2 指向子类对象 称为向上转型

Chinese c = (Chinese) p2;

//子类引用c 指向父类编译类型p2 称为向下转型 需要用(类名)强制转换

c.drink();

//p2.drink();依然报错

((Chinese)p2).drink();

//(Chinese)p2强制转换后可用drink()

//原对象仍然是Chinese类 p2仍然是TestPolymorphism类 c是Chinese类

if(p2 instanceof American){

//判断p2是否属于American类

American a2 = (American) p2;

//由于Chinese类不属于American类 虽然编译时可以强制转换 但运行时会报错

//添加if语句判断instanceof 为false即不执行

a2.eat();

}

}

}

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表