不是说静态的函数不能调用非静态的变量和函数吗 为什么这个程序编译通过了呢?

守望人生522 2014-01-12 01:38:39


class Base
{
int i=99;
public void amethod()
{
System.out.println("base.amethod");
}
Base()
{
amethod();
}

}
public class Derived extends Base{

int i=-1;

public void amethod()
{

System.out.println("derived.amethod");

}

public static void main(String[] args) {
// TODO Auto-generated method stub
Base b=new Derived();
System.out.println(b.i);//此处静态函数main 调用了非静态的变量i.
b.amethod();



}

}



...全文
918 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
朦_胧 2014-01-12
  • 打赏
  • 举报
回复
创建实例对象了调用那就行了
teemai 2014-01-12
  • 打赏
  • 举报
回复
那是访问对象的i,Derived.i试试,编译不过
  • 打赏
  • 举报
回复
如果创建了对象,就不是main方法调用了i,你可以在main方法中直接访问i试一下
a13210327925 2014-01-12
  • 打赏
  • 举报
回复
亲 ,你已经创建对象了啊 回去好好看看书
Lavener 2014-01-12
  • 打赏
  • 举报
回复
你不是直接调用的而是通过一个实例对象来调用的,当然可以调用,而且你说的 静态的函数不能调用非静态的变量和函数 这句话本身就不准确。
qneo26 2014-01-12
  • 打赏
  • 举报
回复
引用 楼主 xiaocantang 的回复:


class Base
{
	int i=99;
	public void amethod()
	{
		System.out.println("base.amethod");
	}
	Base()
	{
		amethod();
	}

}
public class Derived extends Base{

	int i=-1;
	
	public void amethod()
	{
		
		System.out.println("derived.amethod");
		
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Base b=new Derived();
		System.out.println(b.i);//此处静态函数main 调用了非静态的变量i.
		b.amethod();
		
		
		
	}

}



卤煮理解错了,不过你可以直接调用Derived类的非静态方法amethod就会发现不能编译
qneo26 2014-01-12
  • 打赏
  • 举报
回复
看的出来,卤煮是新手吧。 Base b=new Derived(); 这句已经新建了一个Base对象b,所以才可以编译通过, 但是假如你直接使用Base.i或者是Base.amethod这样就会出错了

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧