/**
* 测试多态 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();
【Java|polymorphism多态-java三大特性】//(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();
- 电子商务|Java:Java内部类简介
- Java|Java容器有哪些
- javascript|真我GT2大师探索版信息全汇总,疑似3998元起
- Java|Java架构师技术专家-成长直通车-完结
- Java|又一位互联网大佬宣布移居海外!!
- javascript|七款最优秀的Java测试框架
- javascript|东京大学环境工学博士评判鸿蒙系统是套壳安卓
- 数据库|Java:Java 中的注解简介
- Java|Java:Java 中的注解简介
- javascript|5G专利“新规”被利用,中兴的提前布局有盼头了!