A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 夏季熬成了秋 于 2014-6-7 21:16 编辑
  1. class Animal{
  2.         String name;
  3.         int age;
  4.         public void run(){
  5.                 System.out.println("animal run");
  6.         }
  7.         public void eat(){
  8.                 System.out.println("animal eat");
  9.         }
  10.         public void roar(String name,int age){
  11.                 System.out.println("animal talk");
  12.         }
  13. }
  14. class Dog extends Animal{
  15. //        String name;
  16. //        int age;

  17.         public void eat(){
  18.                 System.out.println("吃肉");
  19.         }
  20.         public void roar(String name,int age){
  21.                 System.out.println("小汪名叫"+name+",今年"+age+"汪汪~~~");
  22.         }
  23. }
  24. class Cat extends Animal{
  25. //        String name;
  26. //        int age;
  27.         

  28.         public void eat(){
  29.                 System.out.println("吃鱼");
  30.         }
  31.         public void function(){
  32.                 System.out.println(super.name); [color=Red] //这里的super指的是那里???[/color]
  33.         }
  34.         public void function2(){
  35.                 System.out.println(this.name);
  36.         }
  37.         public void roar(String name,int age){
  38.                 this.name = name;
  39.                 this.age = age;
  40.                 System.out.println("小喵名叫"+name+",今年"+age+"岁");
  41.         }
  42. }

  43. class ZuoYe{
  44.         public static void main(String[] args){
  45.                 Animal d = new Dog();
  46.                 method(d);
  47.                
  48.                 Animal c = new Cat();
  49.                 method(c);
  50. //                Cat cc = (Cat)c;
  51.                 c.roar("阿喵",3);
  52.                 System.out.println("__________________");
  53.                 Cat cc = (Cat)c;
  54.                 cc.function();
  55.                 System.out.println("__________________");
  56.                 cc.function2();
  57.                 System.out.println("__________________");
  58.                 Animal a = new Animal();
  59.                 System.out.println(a.name);
  60.         }
  61.         public static  void method(Animal a){
  62.                 a.run();//
  63.                 a.eat();
  64.         }
  65. }
复制代码


我想问代码中的红色注视部分.里面的super指的是哪里?

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

10 个回复

倒序浏览
应该是父类 animal把
回复 使用道具 举报
卞新浩 发表于 2014-6-6 22:16
应该是父类 animal把

那他输出值怎么会和this指向输出的值一样呢?
回复 使用道具 举报
不知道对不对,我的理解,到能说通。

你现在的情况,子类是继承父类的String name; 你给它赋值 阿喵 的时候,内存中就这一个name;父类,子类都用的这个name,  所以,你赋什么值,super和this都打印的是什么。

你要是给父类写了一个String name;   子类也写了一个 String name;   那你赋值就只改变this输出的值了,super输出的就是null,当然你要是给父类的name赋了个比如“哈哈”什么的,输出的就不是null,就是哈哈了;

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

回复 使用道具 举报
嗯嗯,明白了哈.你这听详细.专业点就是java里面的就近原则.哈哈..这几天搞的多了有点蒙了.谢谢你哈.
回复 使用道具 举报
夏季熬成了秋 发表于 2014-6-7 21:15
嗯嗯,明白了哈.你这听详细.专业点就是java里面的就近原则.哈哈..这几天搞的多了有点蒙了.谢谢你哈. ...

就近原则理解也行。
其实在堆内存中:有两个name,分别是:(super.name),(tjhs.name)。如果在name的前面什么都不是调用的是this.name 。写了super则必然调用父类的name(除非被prvate修饰)
回复 使用道具 举报
谭荣强 发表于 2014-6-8 03:15
就近原则理解也行。
其实在堆内存中:有两个name,分别是:(super.name),(tjhs.name)。如果在name的前面 ...

什么都不写
回复 使用道具 举报
谭荣强 发表于 2014-6-8 03:15
就近原则理解也行。
其实在堆内存中:有两个name,分别是:(super.name),(tjhs.name)。如果在name的前面 ...

好像子类中的name和父类就是一个name而不是两个吧.
回复 使用道具 举报
夏季熬成了秋 发表于 2014-6-8 20:53
好像子类中的name和父类就是一个name而不是两个吧.

两个name,变量不可以被覆盖
回复 使用道具 举报
其实可以验证是父类的,你在父类里面给name赋值。再实例化Cat,调用function()就知道了。
  1. package com.study.two;

  2. class Animal{
  3.     String name="dongwu";
  4.     int age;
  5.     public void run(){
  6.             System.out.println("animal run");
  7.     }
  8.     public void eat(){
  9.             System.out.println("animal eat");
  10.     }
  11.     public void roar(String name,int age){
  12.             System.out.println("animal talk");
  13.     }
  14. }
  15. class Dog extends Animal{

  16.     public void eat(){
  17.             System.out.println("吃肉");
  18.     }
  19.     public void roar(String name,int age){
  20.             System.out.println("小汪名叫"+name+",今年"+age+"汪汪~~~");
  21.     }
  22. }
  23. class Cat extends Animal{

  24.     public void eat(){
  25.             System.out.println("吃鱼");
  26.     }
  27.     public void function(){
  28.             System.out.println(super.name);  //这里的super指的是那里???
  29.     }
  30.     public void function2(){
  31.             System.out.println(this.name);
  32.     }
  33.     public void roar(String name,int age){
  34.             this.name = name;
  35.             this.age = age;
  36.             System.out.println("小喵名叫"+name+",今年"+age+"岁");
  37.     }
  38. }

  39. class ZuoYe{
  40.     public static void main(String[] args){
  41.            
  42.             Cat c=new Cat();
  43.             c.function();
  44.            
  45.           /*  Animal d = new Dog();
  46.             method(d);
  47.             
  48.             Animal c = new Cat();
  49.             method(c);*/

  50.            
  51.            /* c.roar("阿喵",3);
  52.             System.out.println("__________________");
  53.             Cat cc = (Cat)c;
  54.             cc.function();
  55.             System.out.println("__________________");
  56.             cc.function2();
  57.             System.out.println("__________________");
  58.             Animal a = new Animal();
  59.             System.out.println(a.name);*/
  60.     }
  61.     public static  void method(Animal a){
  62.             a.run();
  63.             a.eat();
  64.     }
  65. }
复制代码
回复 使用道具 举报
123_yaya 发表于 2014-6-9 10:51
其实可以验证是父类的,你在父类里面给name赋值。再实例化Cat,调用function()就知道了。
...

嗯嗯  辛苦喽.我明白啦 谢谢喔.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马