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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wlt 中级黑马   /  2013-4-13 11:35  /  2211 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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,为什么编译器显示错误,该怎么改?先谢谢了!
}

}

评分

参与人数 1技术分 +1 收起 理由
张熙韬 + 1

查看全部评分

10 个回复

倒序浏览
class B extends B?
回复 使用道具 举报
帅哥,你B类继承的谁呢,改继承A
回复 使用道具 举报
你的B继承B?而且super也不是那样用的,你应该是看视频的吧!你仔细看看老师是怎么讲的,怎么写的!
回复 使用道具 举报
  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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
张熙韬 + 1

查看全部评分

回复 使用道具 举报
你这小程序问题不少:
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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
张熙韬 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 山西_李帅 于 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的对象直接调用,  在以后的视频会讲解到。

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





评分

参与人数 1技术分 +1 收起 理由
张熙韬 + 1

查看全部评分

回复 使用道具 举报
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();

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
因为主函数是静态的,所以x=2编译失败因为静态是能访问非静态成员的;
想要调用父类中的成员变量x,可以通过子类对象调用;
静态中是不会使用this、super的,因为静态成员优先于对象存在。
回复 使用道具 举报
如果子类中出现了非私有的同名成员变量时,子类要访问本类中的变量,用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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
如果问题未解决,请继续追问,如果没有问题了,请将帖子分类 改为“已解决”,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马