2021-07-01对于同一个类中static成员访问非static成员的思考

代码如下:

package hellojava;

public class hello{
	public class Animal { 
		 public void eat() {}
		}
		public class Horse extends Animal {
		 public void eat(String food) {}
		}
		public class UseAnimals {
		 public void doStuff(Animal a) {
		 System.out.println("Animal");
		 }
		 public void doStuff(Horse h) {
		 System.out.println("Horse");
		 }
		}

		 public static void main (String [] args) {
			 UseAnimals ua = new UseAnimals();
			 Animal animalobj = new Animal();
			 Horse horseobj = new Horse();
			 Animal animalRefToHorse = new Horse();
			 ua.doStuff(animalobj);
			 ua.doStuff(horseobj);
			 ua.doStuff(animalRefToHorse);
			 }
			
}

我的原意是测试:

这张图的意思是不是说,前面定义了一个变量的引用类型,为Animal;后面赋给这个变量实质的实例类型,为Horse。
但是他的类型还是算Animal??

结果出现了意想不到的错误

静态编译时,报错

No enclosing instance of type hello is accessible. Must qualify the allocation with an enclosing instance of type hello (e.g. x.new A() where x is an instance of hello).

原来是因为:
在一个类的静态成员中去访问非静态成员之所以会出错是因为在类的非静态成员不存在的时候静态成员就已经存在了,访问一个内存中不存在的东西当然会出错。

所以给三个类加上static修饰符之后,可以运行

Animal
Horse
Animal

运行结果证明,类型还是算Animal

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值