为什么java中的this和super只能用在非静态方法中
还有我看的这本书上书说只有名字,返还值类型,和形参都相同的子类方法才会覆盖父类的方法,是这样的吗?我感觉和返还值没关系,只要名字和形参相同就覆盖了,因为编译器看到你调用一...
还有我看的这本书上书说只有名字,返还值类型,和形参都相同的子类方法才会覆盖父类的方法,是这样的吗?我感觉和返还值没关系,只要名字和形参相同就覆盖了,因为编译器看到你调用一个叫a的函数,它怎么知道你要哪个返还值的版本呢?
两个问题
可是静态方法本事只能操作静态变量啊,任何一个实例里都包含从类中继承的静态变量,我用this去访问它有错吗 如
public class a
{
static int a;
static void count()
{
int a ;
this.a+=a;
}
}
方法count中的this.a就是静态变量a,这样做有错吗 展开
两个问题
可是静态方法本事只能操作静态变量啊,任何一个实例里都包含从类中继承的静态变量,我用this去访问它有错吗 如
public class a
{
static int a;
static void count()
{
int a ;
this.a+=a;
}
}
方法count中的this.a就是静态变量a,这样做有错吗 展开
2010-10-14
展开全部
static修饰的方法是类方法,不属于某个对象的,是属于整个类的。而this和super都是指向对象,代表调用该方法的对象,但是现在static方法既然不需要对象来调用,this和super自然就不应该存在于静态方法的内部!
名字,返还值类型,和形参都相同的子类方法才会覆盖父类的方法。关于你的想法,只要名字和形参不能覆盖,只能继承。返回值不同,那方法的功能就不同。谢谢!
名字,返还值类型,和形参都相同的子类方法才会覆盖父类的方法。关于你的想法,只要名字和形参不能覆盖,只能继承。返回值不同,那方法的功能就不同。谢谢!
展开全部
public class Test1 extends Test{
public String print(){
System.out.println("main的方法");
}
public static void main(String []args)
{
new TestYield().print();
}
}
class Test{
public void print(){
System.out.println("Test的方法");
}
}
根据你所理解的写了这段代码 你可以运行下,就可以发现错误
TestYield.java:2: TestYield 中的 print() 无法覆盖 Test 中的 print();正在尝试使
用不兼容的返回类型
找到: java.lang.String
需要: void
public String print(){
^
1 错误
因为返回值不一样,方法就不一样,要返回值,形参,方法名字都相同才能覆盖父类的方法。你的想法换个方式也可以理解成,子类也有了父类的那个方法print(),子类又创建了一个和父类方法print(),两个功能不同方法同名,当然不可能了!
你用this去访问静态变量是没错,因为静态变量a是对整个类而言的,this代表当前对象,当前对象当然属于静态变量所在的类。。。
public String print(){
System.out.println("main的方法");
}
public static void main(String []args)
{
new TestYield().print();
}
}
class Test{
public void print(){
System.out.println("Test的方法");
}
}
根据你所理解的写了这段代码 你可以运行下,就可以发现错误
TestYield.java:2: TestYield 中的 print() 无法覆盖 Test 中的 print();正在尝试使
用不兼容的返回类型
找到: java.lang.String
需要: void
public String print(){
^
1 错误
因为返回值不一样,方法就不一样,要返回值,形参,方法名字都相同才能覆盖父类的方法。你的想法换个方式也可以理解成,子类也有了父类的那个方法print(),子类又创建了一个和父类方法print(),两个功能不同方法同名,当然不可能了!
你用this去访问静态变量是没错,因为静态变量a是对整个类而言的,this代表当前对象,当前对象当然属于静态变量所在的类。。。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
静态的方法可以在没有创建实例时使用,而申明为非静态的成员变量是一个对象属性,它只有在对象存在时引用,因此如果在对象未创建实例时我们在静态方法中调用了非静态成员方法自然是非法的,所以编译器会在这种时候给各错误.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
静态是用static形式修饰的,
表示在作用域范围内,所有访问的都是同一个类
然而this,代表这个有类的当前一个实例,
每new一次, this 表示的就不同,static无论你怎么new 多少个对象,
static修饰的都是同一个。
super类似this,
这两者,当然不能在static当中用this.
表示在作用域范围内,所有访问的都是同一个类
然而this,代表这个有类的当前一个实例,
每new一次, this 表示的就不同,static无论你怎么new 多少个对象,
static修饰的都是同一个。
super类似this,
这两者,当然不能在static当中用this.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询