Chinaunix首页 | 论坛 | 博客
  • 博客访问: 428401
  • 博文数量: 54
  • 博客积分: 610
  • 博客等级: 上士
  • 技术积分: 721
  • 用 户 组: 普通用户
  • 注册时间: 2011-01-24 10:52
文章分类

全部博文(54)

文章存档

2013年(27)

2012年(11)

2011年(16)

分类: Java

2013-05-24 17:56:16


点击(此处)折叠或打开

  1. public class Test {
  2.     public static void main(String[] args) {
  3.         Dog dog = new Dog();
  4.         dog.call();
  5.         MiniDog mini = new MiniDog();
  6.         mini.call();
  7.         
  8.         Dog d = (Dog) mini;
  9.         d.call();
  10.         
  11.     }
  12. }

  13. public class Dog {
  14.     private String getName(){
  15.         return "Dog";
  16.     }
  17.     
  18.     public String bark(){
  19.         return "wang-wang";
  20.     }
  21.     
  22.     public void call(){
  23.         System.out.println("I'm " + getName() + " " + bark());
  24.     }
  25. }

  26. public class MiniDog extends Dog {
  27.     private String getName(){
  28.         return "Mini";
  29.     }
  30.     
  31.     public String bark(){
  32.         return "WOO";
  33.     }
  34. }
大家觉得答案是什么呢?
I'm Dog wang-wang
I'm Dog WOO
I'm Dog WOO

1.请注意 Dog getName函数是私有的,也就是说 他的子类是无法override的,
所以子类在call的时候,调用的getName 是父类的。
2,要注意子类的getName也必须是private的,因为子类的函数权限是不能比父类的权限开放的

可是,既然子类中看不到父类的getName,那编译器为啥拒绝子类getName函数修改权限呢?

阅读(1139) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~