Java 多态总结

主要说一下遇到的很有意思的问题,具体的多态看上篇,应该就能理解多态了,这篇主要讲述遇到的另外一个有意思的机制

package work0808;

 

class Wtf {

String name;

 

public void sound(Guitar g) {

System.out.println("用吉他演奏");

}

 

public void sound(Piano p) {

System.out.println("用钢琴演奏");

}

public void sound(Wtf wtf) {

System.out.println("Wtfde wtf");

}

 

}

 

class Guitar extends Wtf {

String logo;

public void sound(Guitar g) {

System.out.println("用吉他演奏");

}

public void sound(Wtf wtf) {

System.out.println("Guitar de wtf");

}

}

 

class Piano extends Wtf {

@Override

public void sound(Piano p) {

// TODO Auto-generated method stub

System.out.println("用钢琴演奏");

}

public void sound(Wtf wtf) {

System.out.println("Piano de wtf");

}

}

 

public class Work8 {

public static void main(String[] args) {

Guitar gt=new Guitar();

Piano pn=new Piano();

Wtf g = new Guitar();

Wtf p = new Piano();

System.out.println(g.getClass().getName());

g.sound(g);

p.sound(pn);

}

 

}

 

 

在这里 这个g 对象 编译是识别为 Wtf 类的对象的,但是你getClass getName  会发现 输出的是 Guitar 对象 ,这个原因跟调方法调的是子类的方法一样(前提是父类也有的),就是因为编译器编译时,载入的是父类,和子类  但是编译时会把 子类独有的 属性和方法屏蔽掉,然后才会 按照子类的模板生成对象。所以 getClass getName是子类的,而作为参数会被认为是父类的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值