「已注销」 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()进行静态引用

  • 写回答

7条回答 默认 最新

  • 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,就是要不都加,要不都不加。

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

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

报告相同问题?

悬赏问题

  • ¥15 输入的char字符转为int类型,不是对应的ascall码,如何才能使之转换为对应ascall码?或者使输入的char字符可以正常与其他字符比较?
  • ¥15 解决websocket跟c#客户端通信
  • ¥30 Python调用dll文件输出Nan重置dll状态
  • ¥15 浮动div的高度控制问题。
  • ¥66 换电脑后应用程序报错
  • ¥50 array数据同步问题
  • ¥15 pic16F877a单片机的外部触发中断程序仿真失效
  • ¥15 Matlab插值拟合差分微分规划图论
  • ¥15 keil5 target not created
  • ¥15 C/C++数据与算法请教