网站首页 > java教程 正文
/**
* 测试多态 polymorphism 方法的多态
*/
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();
}
}
}
猜你喜欢
- 2024-09-27 Java面向对象的三大特性之——多态
- 2024-09-27 Java语言的特点有哪些?你对Java认知有多少?
- 2024-09-27 大厂面试系列-详解Java面向对象的三大基本特征
- 2024-09-27 Java的这五大特点你都不知道,还敢说自己是程序猿?
- 2024-09-27 Java入门学习:快速了解Java语言的11个特点
- 2024-09-27 细说JAVA的特点,快速带你走近Java的世界
- 2024-09-27 理解Java的三大特性之封装(java封装的定义)
- 2024-09-27 Java语言的11大特性-你知道吗?(java语言的11大特性-你知道吗?怎么回答)
- 2024-09-27 嗨,你知道吗,Spring还有这些高级特性
- 2024-09-27 java不可不知系列——java的11个特点,为什么要选择java?
你 发表评论:
欢迎- 最近发表
-
- Java常量定义防暴指南:从"杀马特"到"高富帅"的华丽转身
- Java接口设计原则与实践:优雅编程的艺术
- java 包管理、访问修饰符、static/final关键字
- Java工程师的代码规范与最佳实践:优雅代码的艺术
- 编写一个java程序(编写一个Java程序计算并输出1到n的阶乘)
- Mycat的搭建以及配置与启动(mycat部署)
- Weblogic 安装 -“不是有效的 JDK Java 主目录”解决办法
- SpringBoot打包部署解析:jar包的生成和结构
- 《Servlet》第05节:创建第一个Servlet程序(HelloSevlet)
- 你认为最简单的单例模式,东西还挺多
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)