黑马程序员技术交流社区

标题: 关于继承的super问题 [打印本页]

作者: wlt    时间: 2013-4-13 11:35
标题: 关于继承的super问题
本帖最后由 wlt 于 2013-4-14 20:46 编辑

class A
{
    int x;
}
    public class B extends B
{
    int x;
    public static void main(String args[])
{
     x=2;//调用的B里面的x
     super.x=2;//我想调用父类的x,为什么编译器显示错误,该怎么改?先谢谢了!
}

}

作者: 张旺达    时间: 2013-4-13 11:51
class B extends B?
作者: 李易烜    时间: 2013-4-13 12:04
帅哥,你B类继承的谁呢,改继承A
作者: Asan    时间: 2013-4-13 12:06
你的B继承B?而且super也不是那样用的,你应该是看视频的吧!你仔细看看老师是怎么讲的,怎么写的!
作者: 通行天下    时间: 2013-4-13 12:26
  1. class A
  2. {
  3.         int x;
  4.         A(int x)
  5.         {
  6.                 this.x = x;
  7.                 System.out.println("A:x="+x);
  8.         }
  9. }

  10. public class B extends A
  11. {
  12.         B(int x)
  13.         {
  14.                 super(x); //super语句必须是第一条语句!这条语句执行时回去调用父类的相应构造函数。
  15.                 System.out.println("B:x="+x);
  16.         }
  17.          
  18.         public static void main(String[] args)
  19.         {
  20.                 new B(2);//创建一个B对象,并去调用B的相应构造函数。
  21.         }
  22. }
复制代码

作者: 聖手`书生    时间: 2013-4-13 12:50
你这小程序问题不少:
1.类继承本类,肯定错误。
2.静态的主函数怎么能调用非静态的this或者super方法呢。
3.没有实例化对象,怎么会出现this和super语句。

下面给你写个小程序,你借鉴一下,这个的x和this.x 都是B类中的成员变量x。
  1. class A
  2. {
  3.     int x=2;
  4. }

  5. class B extends A
  6. {
  7.     int x=3;
  8.         void show()
  9.         {
  10.                 System.out.println(x);
  11.                 System.out.println(this.x);
  12.                 System.out.println(super.x);
  13.         }  
  14. }
  15.        
  16. class M
  17. {
  18.         public static void main(String args[])
  19.         {
  20.                 B b= new B();
  21.                 b.show();
  22.         }

  23. }
复制代码

作者: 山西_李帅    时间: 2013-4-13 13:17
本帖最后由 山西_李帅 于 2013-4-13 13:23 编辑

class A
{
    int x;
}
    public class B extends B
{
    int x;
    public static void main(String args[])
{
     x=2;//调用的B里面的x
     super.x=2;//我想调用父类的x,为什么编译器显示错误,该怎么改?先谢谢了!
}

}



同学,首页说下,你B继承B了,  明显错了,应该是B继承A,下次小心点。

再者super不是那样用的。

如果你想调用x,那么有两种方法,

1,就是建立B的对象,然后对象.X调用。

2,还有就是如果这个属性是静态的,那么你就直接可以类名点属性名调用了。

还有就是你问的问题,如果你想调用父类的属性, 看清,是父类的属性的话,也就是说你想通过B继承了A以后去调用A的属性,那么这时就需要建立B的对象,也就涉及到多态了。

要么你就直接建立A的对象直接调用,  在以后的视频会讲解到。

多看视频,这些都是一些小知识点,加油!!






作者: 崔宝东    时间: 2013-4-14 08:45
class A
{
    int x;
}
public class B extends A
{
    int x;
    public static void main(String args[])
{
/**因为主函数是静态的;
* 首先x=2;编译失败是因为静态是不能访问非静态成员的;
* 还有就是静态函数里面是不能用super和this等关键字的,所以 super.x=2编译失败;
*
* 我们这里想要调用父类中的成员变量,可以采用对外创建一个非静态的方法,然后进行调用。
*/
//     x=2;//调用的B里面的x
//     super.x=2;//我想调用父类的x,为什么编译器显示错误,该怎么改?先谢谢了!
           
            B b = new B();
            b.getvalue();
作者: 庄生晓梦    时间: 2013-4-14 10:39
因为主函数是静态的,所以x=2编译失败因为静态是能访问非静态成员的;
想要调用父类中的成员变量x,可以通过子类对象调用;
静态中是不会使用this、super的,因为静态成员优先于对象存在。
作者: gerenvip    时间: 2013-4-14 13:10
如果子类中出现了非私有的同名成员变量时,子类要访问本类中的变量,用this
子类要访问父类中的同名变量,用super
super代表父类对象的引用。this代表子类对象的引用。
  1. class Fu
  2. {
  3.         int num=4;
  4. }
  5. class Zi extends Fu
  6. {
  7.         int num = 5;
  8.         void show()
  9.         {
  10.                 System.out.println(this.num);
  11.                 System.out.println(super.num);
  12.         }
  13. }
  14. class  FuZi
  15. {
  16.         public static void main(String[] args)
  17.         {
  18.                 Zi z = new Zi();
  19.                 z.show();
  20.                
  21.         }
  22. }
复制代码

作者: 黄玉昆    时间: 2013-4-14 14:06
如果问题未解决,请继续追问,如果没有问题了,请将帖子分类 改为“已解决”,谢谢




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2