「已注销」 2020-11-20 09:21 采纳率: 100%
浏览 7
已采纳

萌新问几个关于java继承的问题

Item.java
package Item;

public class Item {
    static String  name;
    static String author;
    static int time;
    static int money;
    static boolean ifget;
    
	public Item(String name, String author, int time, int money, boolean ifget) {
		super();
		this.name = name;
		this.author = author;
		this.time = time;
		this.money = money;
		this.ifget = ifget;
	}

   
	public static  void print() {
		// TODO 自动生成的方法存根
		System.out.println(name);
	}
       
       
}


music.java
package Item;

public class music extends Item {

	public music(String name, String author, int time, int money, boolean ifget) {
		super(name, author, time, money, ifget);
		// TODO 自动生成的构造函数存根
	}
	


	public static void main(String[] args) {
		// TODO 自动生成的方法存根
    
	}

}

work.java
package Item;

import java.util.ArrayList;
import java.util.List;

public class work {
     
	 private  ArrayList<Item> listitem = new ArrayList<Item>();
	 
	 public void add(Item item) {
		 listitem.add(item);
	 }
	 
	public void list() {
		for(Item item : listitem) {
			Item.print();
		}
		
	}
	
	
	public static void main(String[] args) {
		// TODO 自动生成的方法存根
    work a = new work();
    a.add(new music("1","1",1,1,true));
    a.add(new music("3","1",1,1,true));
    a.list();
	}
}

最终work运行结果都是3

请问为什么啊?

还有,为什么我的子类music不能定义父类同名函数print(),但把父类print()函数的static去掉就可以,但这样的话work会报错:

不能对类型 Item 中的非静态方法 print()进行静态引用

  • 写回答

8条回答 默认 最新

  • qq_25376897 2020-11-20 10:01
    关注

    1、为什么work运行结果都是3?因为Item里面的name加了static,变成了类变量(全局、静态变量),就是下面new music了两次,每次改的都是同一个name,所以第二次的3把第一次的1也改成3了,所以两次输出都是3

    2、为什么我的子类music不能定义父类同名函数print()?父类加了static变成静态的,子类再定义同名方法,就会被认为是在重写父类方法(override),子类的方法也必须和父类一样加static静态;同理,父类去掉static,子类也不能加static,就是要不都加,要不都不加。

    这里面涉及了继承,类变量,类方法,实例对象,对象方法等,建议把每个都吃透,不然混在一起不好理解

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(7条)

报告相同问题?

悬赏问题

  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 关于#python#的问题:自动化测试