`
mfcai
  • 浏览: 409174 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java继承容易犯的错误

阅读更多
在网上看见一个关于java继承的问题,觉得这是很多初学java应该注意的问题。
public abstract class A {
  int i=1;
  public void printI() {
    System.out.println("i="+i);
  }
}

public class B  extneds A{
  int i=2;
  public static void main(String[] args) {
    B b=new B();
    b.printI();
  }
}

那么,控制台打出来的i的值是多少?
呵呵,如果一下功夫就能说出正确结果1,那么,下面部分就不需要往下看了。

1、类的继承知识点
(1)java不支持多重继承,也就是说子类至多只能有一个父类
(2)子类继承了其父类中不是私有的成员变量和成员方法,作为自己的成员变量和方法
(3)子类中定义的成员变量和父类中定义的成员变量相同时,则父类中的成员变量不能被继承
(4)子类中定义的成员方法,并且这个成员方法的名字,返回类型,及参数个数和类型与父类的某个成员方法完全相同,则父类的成员方法不能被继承。

2、答案是2者如是说
  子类B中的变量i和父类A中的变量i重名, 那么子类B中的变量i将会覆盖掉父类中的同名变量i. 则访问父类中的变量时jvm会把子类cast到父类.所以,打印出的结果应该是“i=2”;

3、歧义的产生
  歧义的产生最关键的地方是子类B中的变量i将会覆盖掉父类中的同名变量i的覆盖两个字。这里,我觉得这两个字容易误导。应该改为屏蔽或隐藏。因为在这里父类的成员变量是没有被改变。

4、jvm的执行过程
(1)子类B 的构造方法被调用,实例化一个B对象,B对象的成员被初始化
(2)jvm隐含的调用父类的构造方法,实例化一个A对象,A对象的成员被初始化。
(3)由于A对象的printI()未被屏蔽,所以调用的A对象的printI()函数。
那么,在这里A的成员函数当然是访问自己的成员变量了。

5、super关键字
super关键字在java中的作用是使被屏蔽的成员变量或者成员方法或变为可见,或者说用来引用被屏蔽的成员变量和成员成员方法。super是用在子类中,目的是访问直接父类中被屏蔽的成员。上面的代码也可以这样写:
public abstract class A {
  int i=1;
  public void printI() {
    System.out.println("i="+i);
  }
}
public class B extends A{
	public int i=2;
	public void printI(){
		super.printI();
	}
	public static void main(String[] args){
		B b= new B();
		b.printI();
		
	}
}
分享到:
评论
29 楼 gembler 2008-12-31  
如果主帖中有代码片段,麻烦在发前先自己运行一下
28 楼 xintian3 2008-12-31  
抽象类不能实例化,然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。
抽象类初始化同类的初始化。
27 楼 mars李 2008-04-15  
学习。。。
26 楼 bomb_football 2008-04-15  
foy 写道
mfcai 写道
foy 写道
引用
我觉得你这句话“抽象类,和类的差别就是,不可以有实体。“有待商榷。
你这句话要表达的意思应该是这样理解:abstract类不能创建对象,必须由其子类来创建对象。
我觉得这里应该是指用户不能创建abstract类的对象。但没有表明jvm不能初始化abstract类啊?
退一步,如果抽象类在jvm中没有被实例化,那么用户在子类中使用super调用抽象类的方法,怎么理解?


类的初始化和实例化是两码事。任何类在使用前都会经过装载-->连接-->初始化三个过程。
类的构造方法不能当成普通的方法,应当看成类似于static的方法

foy,类的初始化和实例化是两码事,就不讨论了。
我的观点是反对“父类根本就没有在堆内存空间中”。


我觉得“父类根本就没有在堆内存空间中”这话是没有错的。



1、按照jvm规范,堆是运行时数据区域,类实例化的内存都由类分配,抽象类也是类,为什么抽象类就不在堆空间里呢?那你能告诉我,“父类根本就没有在堆内存空间中”,那父类在哪里实例化的呢?
2、对于你的那句“类的构造方法不能当成普通的方法,应当看成类似于static的方法”,我也不敢苟同.恕我愚钝,实在是不能明白为什么要和构造方法看成是static的方法???  static方法是类在装载的过程中,JVM会调用内置的<clinit>方法对其进行初始化调用。而构造方法是在对象创建时,JVM会调用内置的<init>方法来调用它。
25 楼 njustwalker 2008-04-14  
我忽然想到另外一个问题
如果我要使用父类中的方法而要使用子类中的变量 可以吗?
我要用就是想让楼主题目中用父类函数打印出子类中的i可以吗?
24 楼 ericxu131 2008-04-13  
我觉得

抽象的父类给我感觉就是其子类的参照

JVM在初始化子类前会先初始化父类中的成员,调用构造函数但而并非实例化父类

父类根本就没有在堆内存空间中,而他里面的成员是被先初始化到堆内存空间中
23 楼 lishali12345 2008-04-13  
其实这个问题是不是可以从Java初始化的顺序上来给出一个解释呢!?
其顺序如下:

1.  父类静态成员和静态初始化块  ,按在代码中出现的顺序依次执行

2.  子类静态成员和静态初始化块 ,按在代码中出现的顺序依次执行

3.  父类实例成员和实例初始化块 ,按在代码中出现的顺序依次执行

4.  父类构造方法

5.  子类实例成员和实例初始化块 ,按在代码中出现的顺序依次执行

6.  子类构造方法

如此不就很明了了吗?
父类的实例成员在子类的实例成员初始化前已经初始化好了,打印出来的当然就是父类中定义的1了吧!
不知理解是否正确?!
还请各位酌定!
22 楼 foy 2008-04-12  
mfcai 写道
foy 写道
引用
我觉得你这句话“抽象类,和类的差别就是,不可以有实体。“有待商榷。
你这句话要表达的意思应该是这样理解:abstract类不能创建对象,必须由其子类来创建对象。
我觉得这里应该是指用户不能创建abstract类的对象。但没有表明jvm不能初始化abstract类啊?
退一步,如果抽象类在jvm中没有被实例化,那么用户在子类中使用super调用抽象类的方法,怎么理解?


类的初始化和实例化是两码事。任何类在使用前都会经过装载-->连接-->初始化三个过程。
类的构造方法不能当成普通的方法,应当看成类似于static的方法

foy,类的初始化和实例化是两码事,就不讨论了。
我的观点是反对“父类根本就没有在堆内存空间中”。


我觉得“父类根本就没有在堆内存空间中”这话是没有错的。
21 楼 mfcai 2008-04-12  
foy 写道
引用
我觉得你这句话“抽象类,和类的差别就是,不可以有实体。“有待商榷。
你这句话要表达的意思应该是这样理解:abstract类不能创建对象,必须由其子类来创建对象。
我觉得这里应该是指用户不能创建abstract类的对象。但没有表明jvm不能初始化abstract类啊?
退一步,如果抽象类在jvm中没有被实例化,那么用户在子类中使用super调用抽象类的方法,怎么理解?


类的初始化和实例化是两码事。任何类在使用前都会经过装载-->连接-->初始化三个过程。
类的构造方法不能当成普通的方法,应当看成类似于static的方法

foy,类的初始化和实例化是两码事,就不讨论了。
我的观点是反对“父类根本就没有在堆内存空间中”。
20 楼 foy 2008-04-12  
引用
我觉得你这句话“抽象类,和类的差别就是,不可以有实体。“有待商榷。
你这句话要表达的意思应该是这样理解:abstract类不能创建对象,必须由其子类来创建对象。
我觉得这里应该是指用户不能创建abstract类的对象。但没有表明jvm不能初始化abstract类啊?
退一步,如果抽象类在jvm中没有被实例化,那么用户在子类中使用super调用抽象类的方法,怎么理解?


类的初始化和实例化是两码事。任何类在使用前都会经过装载-->连接-->初始化三个过程。
类的构造方法不能当成普通的方法,应当看成类似于static的方法
19 楼 mfcai 2008-04-12  
dearmite 写道
抽象类,和类的差别就是,
不可以有实体。

B b = new B();  
        A a = new B();
这里的变量类型看似不同,

但是,内存中实际上都是B类。
这个和接口一样,
接口中不同样也可以定义变量么。(只是都变成了final)

指向类的时候,它就指到了类的首地址上!


  A a = new B();为什么不可能写成  A a = new A();

  A a = new B();  
实际上是,
A a ;
a= new B();
a 是抽象的,根本就无实体。
     

我觉得你这句话“抽象类,和类的差别就是,不可以有实体。“有待商榷。
你这句话要表达的意思应该是这样理解:abstract类不能创建对象,必须由其子类来创建对象。
我觉得这里应该是指用户不能创建abstract类的对象。但没有表明jvm不能初始化abstract类啊?
退一步,如果抽象类在jvm中没有被实例化,那么用户在子类中使用super调用抽象类的方法,怎么理解?
18 楼 dearmite 2008-04-12  
B b;
sysout (b);

b= new B();  
sysout (b);
  A a;
sysout (a);
a = b;

sysout (a);

把这里的null,和类的首地址打出来,一看便知!!!

null 是栈中变量无任何指向。
这个和C++一样,

A a = new B();

和C++ 中  A *p = new B() p 这里放了B的首地址。
是一样的,JAVA的隐指针!


17 楼 dearmite 2008-04-12  
抽象类,和类的差别就是,
不可以有实体。

B b = new B();  
        A a = new B();
这里的变量类型看似不同,

但是,内存中实际上都是B类。
这个和接口一样,
接口中不同样也可以定义变量么。(只是都变成了final)

指向类的时候,它就指到了类的首地址上!


  A a = new B();为什么不可能写成  A a = new A();

  A a = new B();  
实际上是,
A a ;
a= new B();
a 是抽象的,根本就无实体。
     
16 楼 mfcai 2008-04-12  
dearmite 写道
lsk 写道
mfcai 写道

(4)子类中定义的成员方法,并且这个成员方法的名字,返回类型,及参数个数和类型与父类的某个成员方法完全相同,则父类的成员方法不能被继承

改成这样试试看
public abstract class A {

	int i = 1;

	public void printI() {
		System.out.println("i=" + i);
	}
}

class B extends A {

	@Override
	public void printI() {
		System.out.println("i="+(++i));
	}

	public static void main(String[] args) {
		B b = new B();
		A a = new B();
		a.printI();
		b.printI();
	}
}




父类,无实体,
穿过父类的无发(子类的手)

父类根本就没有在堆内存空间中。。。

也许这里,我们理解有偏差了.
我们知道,在Java中,只要通过关键字new为每个对象申请内存空间 (基本类型除外),所有的对象都能在堆 (Heap)中分配到空间。父类也能被new,那么请问为什么不存在堆内存空间中?
15 楼 dearmite 2008-04-12  
lsk 写道
mfcai 写道

(4)子类中定义的成员方法,并且这个成员方法的名字,返回类型,及参数个数和类型与父类的某个成员方法完全相同,则父类的成员方法不能被继承

改成这样试试看
public abstract class A {

	int i = 1;

	public void printI() {
		System.out.println("i=" + i);
	}
}

class B extends A {

	@Override
	public void printI() {
		System.out.println("i="+(++i));
	}

	public static void main(String[] args) {
		B b = new B();
		A a = new B();
		a.printI();
		b.printI();
	}
}




父类,无实体,
穿过父类的无发(子类的手)

父类根本就没有在堆内存空间中。。。
14 楼 mfcai 2008-04-11  
backbase 写道
4、jvm的执行过程
(1)子类B 的构造方法被调用,实例化一个B对象,B对象的成员被初始化
(2)jvm隐含的调用父类的构造方法,实例化一个A对象,A对象的成员被初始化。
(3)由于A对象的printI()未被屏蔽,所以调用的A对象的printI()函数。

疑问:
     针对楼主这个例子:jvm的执行过程应该是先加载父类,然后加载子类的吧。

我的意思就是:jvm先初始化父类的成员变量和构造函数,在初始化子类的成员变量和构造函数。不知道我的理解是否正确,请大虾们不吝指教,谢谢!

谢谢你的提醒,根据类的加载机制:应该先是父类的成员变量和构造方法,然后才是子类的成员变量和构造方法
在这个地方我表达的不对,抱歉。
13 楼 trydofor 2008-04-11  
如果哪个开发人员写这样的程序,直接开除就行了
12 楼 helyho 2008-04-11  
看懂.学习
11 楼 backbase 2008-04-11  
4、jvm的执行过程
(1)子类B 的构造方法被调用,实例化一个B对象,B对象的成员被初始化
(2)jvm隐含的调用父类的构造方法,实例化一个A对象,A对象的成员被初始化。
(3)由于A对象的printI()未被屏蔽,所以调用的A对象的printI()函数。

疑问:
     针对楼主这个例子:jvm的执行过程应该是先加载父类,然后加载子类的吧。

我的意思就是:jvm先初始化父类的成员变量和构造函数,在初始化子类的成员变量和构造函数。不知道我的理解是否正确,请大虾们不吝指教,谢谢!
10 楼 yulenice 2008-04-10  
It is interesting.

相关推荐

    【java毕业设计】新冠疫情下的校园出入系统源码(ssm+mysql+说明文档+LW).zip

    功能说明: 本系统主要包括以下功能模块:个人中心,通知公告管理,用户管理,工作人员管理,进门登记管理,出门登记管理,出入统计管理,外来登记管理等模块。 环境说明: 开发语言:Java 框架:ssm,mybatis JDK版本:JDK1.8 数据库:mysql 5.7及以上 数据库工具:Navicat11及以上 开发软件:eclipse/idea Maven包:Maven3.3及以上 服务器:tomcat7及以上

    param-1.5.1-cp34-cp34m-win_amd64.whl.rar

    PartSegCore_compiled_backend-0.12.0a0-cp36-cp36m-win_amd64.whl.rar

    yolo算法-分神驾驶数据集-8674张图像带标签-没有安全带-唤醒-昏昏欲睡-安全带-电话-打哈欠.zip

    yolo算法-分神驾驶数据集-8674张图像带标签-没有安全带-唤醒-昏昏欲睡-安全带-电话-打哈欠.zip;yolo算法-分神驾驶数据集-8674张图像带标签-没有安全带-唤醒-昏昏欲睡-安全带-电话-打哈欠.zip;yolo算法-分神驾驶数据集-8674张图像带标签-没有安全带-唤醒-昏昏欲睡-安全带-电话-打哈欠.zip;yolo算法-分神驾驶数据集-8674张图像带标签-没有安全带-唤醒-昏昏欲睡-安全带-电话-打哈欠.zip

    pgmagick-0.7.5-cp37-cp37m-win_amd64.whl.rar

    python whl离线安装包 pip安装失败可以尝试使用whl离线安装包安装 第一步 下载whl文件,注意需要与python版本配套 python版本号、32位64位、arm或amd64均有区别 第二步 使用pip install XXXXX.whl 命令安装,如果whl路径不在cmd窗口当前目录下,需要带上路径 WHL文件是以Wheel格式保存的Python安装包, Wheel是Python发行版的标准内置包格式。 在本质上是一个压缩包,WHL文件中包含了Python安装的py文件和元数据,以及经过编译的pyd文件, 这样就使得它可以在不具备编译环境的条件下,安装适合自己python版本的库文件。 如果要查看WHL文件的内容,可以把.whl后缀名改成.zip,使用解压软件(如WinRAR、WinZIP)解压打开即可查看。 为什么会用到whl文件来安装python库文件呢? 在python的使用过程中,我们免不了要经常通过pip来安装自己所需要的包, 大部分的包基本都能正常安装,但是总会遇到有那么一些包因为各种各样的问题导致安装不了的。 这时我们就可以通过尝试去Python安装包大全中(whl包下载)下载whl包来安装解决问题。

    中国省级与地级市财政转移支付数据-最新.zip

    中国省级与地级市财政转移支付数据-最新.zip

    OPENCV 常用XML 内涵17个常用XML,包括人脸检测,微笑检测,人眼检测,用于学习模型训练和使用

    OPENCV 常用XML 内涵17个常用XML,包括人脸检测,微笑检测,人眼检测,用于学习模型训练和使用

    polylearn-0.1.dev0-cp27-cp27m-win_amd64.whl.rar

    python whl离线安装包 pip安装失败可以尝试使用whl离线安装包安装 第一步 下载whl文件,注意需要与python版本配套 python版本号、32位64位、arm或amd64均有区别 第二步 使用pip install XXXXX.whl 命令安装,如果whl路径不在cmd窗口当前目录下,需要带上路径 WHL文件是以Wheel格式保存的Python安装包, Wheel是Python发行版的标准内置包格式。 在本质上是一个压缩包,WHL文件中包含了Python安装的py文件和元数据,以及经过编译的pyd文件, 这样就使得它可以在不具备编译环境的条件下,安装适合自己python版本的库文件。 如果要查看WHL文件的内容,可以把.whl后缀名改成.zip,使用解压软件(如WinRAR、WinZIP)解压打开即可查看。 为什么会用到whl文件来安装python库文件呢? 在python的使用过程中,我们免不了要经常通过pip来安装自己所需要的包, 大部分的包基本都能正常安装,但是总会遇到有那么一些包因为各种各样的问题导致安装不了的。 这时我们就可以通过尝试去Python安装包大全中(whl包下载)下载whl包来安装解决问题。

    postgresadapter-2.0.1-cp36-cp36m-win_amd64.whl.rar

    python whl离线安装包 pip安装失败可以尝试使用whl离线安装包安装 第一步 下载whl文件,注意需要与python版本配套 python版本号、32位64位、arm或amd64均有区别 第二步 使用pip install XXXXX.whl 命令安装,如果whl路径不在cmd窗口当前目录下,需要带上路径 WHL文件是以Wheel格式保存的Python安装包, Wheel是Python发行版的标准内置包格式。 在本质上是一个压缩包,WHL文件中包含了Python安装的py文件和元数据,以及经过编译的pyd文件, 这样就使得它可以在不具备编译环境的条件下,安装适合自己python版本的库文件。 如果要查看WHL文件的内容,可以把.whl后缀名改成.zip,使用解压软件(如WinRAR、WinZIP)解压打开即可查看。 为什么会用到whl文件来安装python库文件呢? 在python的使用过程中,我们免不了要经常通过pip来安装自己所需要的包, 大部分的包基本都能正常安装,但是总会遇到有那么一些包因为各种各样的问题导致安装不了的。 这时我们就可以通过尝试去Python安装包大全中(whl包下载)下载whl包来安装解决问题。

    Polygon2-2.0.8-cp27-cp27m-win_amd64.whl.rar

    python whl离线安装包 pip安装失败可以尝试使用whl离线安装包安装 第一步 下载whl文件,注意需要与python版本配套 python版本号、32位64位、arm或amd64均有区别 第二步 使用pip install XXXXX.whl 命令安装,如果whl路径不在cmd窗口当前目录下,需要带上路径 WHL文件是以Wheel格式保存的Python安装包, Wheel是Python发行版的标准内置包格式。 在本质上是一个压缩包,WHL文件中包含了Python安装的py文件和元数据,以及经过编译的pyd文件, 这样就使得它可以在不具备编译环境的条件下,安装适合自己python版本的库文件。 如果要查看WHL文件的内容,可以把.whl后缀名改成.zip,使用解压软件(如WinRAR、WinZIP)解压打开即可查看。 为什么会用到whl文件来安装python库文件呢? 在python的使用过程中,我们免不了要经常通过pip来安装自己所需要的包, 大部分的包基本都能正常安装,但是总会遇到有那么一些包因为各种各样的问题导致安装不了的。 这时我们就可以通过尝试去Python安装包大全中(whl包下载)下载whl包来安装解决问题。

    基于SSM的医院管理系统的设计与实现

    开发语言:Java 框架:SSM JDK版本:JDK1.8 服务器:tomcat8.5 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea 浏览器:谷歌浏览器

    yolo算法-扑克牌数据集-1285张图像带标签.zip

    yolo系列算法目标检测数据集,包含标签,可以直接训练模型和验证测试,数据集已经划分好,包含数据集配置文件data.yaml,适用yolov5,yolov8,yolov9,yolov7,yolov10,yolo11算法; 包含两种标签格:yolo格式(txt文件)和voc格式(xml文件),分别保存在两个文件夹中; yolo格式:<class> <x_center> <y_center> <width> <height>, 其中: <class> 是目标的类别索引(从0开始)。 <x_center> 和 <y_center> 是目标框中心点的x和y坐标,这些坐标是相对于图像宽度和高度的比例值,范围在0到1之间。 <width> 和 <height> 是目标框的宽度和高度,也是相对于图像宽度和高度的比例值

    中国各省GDP及农业主要指标数据集(1999-2019).zip

    中国各省GDP及农业主要指标数据集(1999-2019).zip

    【java毕业设计】大学生校园图书角管理系统源码(ssm+mysql+说明文档+LW).zip

    功能说明: 系统主要包括系统主页、个人中心、用户管理、图书信息管理、图书分类管理、图书购买管理、图书借阅管理、图书续借管理、图书归还管理、留言板管理、系统管理等功能模块。 环境说明: 开发语言:Java 框架:ssm,mybatis JDK版本:JDK1.8 数据库:mysql 5.7及以上 数据库工具:Navicat11及以上 开发软件:eclipse/idea Maven包:Maven3.3及以上 服务器:tomcat7及以上

    2023-04-06-项目笔记 - 第三百二十阶段 - 4.4.2.318全局变量的作用域-318 -2025.11.17

    2023-04-06-项目笔记-第三百二十阶段-课前小分享_小分享1.坚持提交gitee 小分享2.作业中提交代码 小分享3.写代码注意代码风格 4.3.1变量的使用 4.4变量的作用域与生命周期 4.4.1局部变量的作用域 4.4.2全局变量的作用域 4.4.2.1全局变量的作用域_1 4.4.2.318局变量的作用域_318- 2024-11-17

    Saturn-PCB-Toolkit-V7.00(土星PCB计算器)

    Saturn_PCB_Toolkit_V7.00_ 是一款功能强大的PCB参数计算工具,本人PCB设计15年一直使用的这款计算器,利用其给出的设计数据(如线距、线宽线厚),布出的PCB实际使用未曾出现过问题 以下是其主要功能特点: 1. **过孔特性计算**:能够计算过孔的寄生电容、寄生电感、过孔阻抗、过孔直流电阻、共振频率、阶跃响应、功耗等参数。 2. **导线载流能力计算**:可以计算不同线宽下的载流能力,根据环境温度和温升条件,提供不同条件下的载流值。 3. **串扰计算**:计算两相互耦合信号线间的串扰,这对于高速PCB设计尤为重要。 4. **波长计算**:提供波长的计算功能,这对于射频和高速数字PCB设计非常关键。 5. **导体阻抗计算**:计算导体的阻抗,这对于阻抗匹配和信号完整性至关重要。 6. **单位换算**:提供单位换算功能,方便不同单位制之间的转换。 7. **差分对计算**:针对差分信号的计算,这对于高速数据传输和降低噪声非常重要。

    yolo算法-车内乘客识别器数据集-1035张图像带标签-乘客.zip

    yolo系列算法目标检测数据集,包含标签,可以直接训练模型和验证测试,数据集已经划分好,包含数据集配置文件data.yaml,适用yolov5,yolov8,yolov9,yolov7,yolov10,yolo11算法; 包含两种标签格:yolo格式(txt文件)和voc格式(xml文件),分别保存在两个文件夹中; yolo格式:<class> <x_center> <y_center> <width> <height>, 其中: <class> 是目标的类别索引(从0开始)。 <x_center> 和 <y_center> 是目标框中心点的x和y坐标,这些坐标是相对于图像宽度和高度的比例值,范围在0到1之间。 <width> 和 <height> 是目标框的宽度和高度,也是相对于图像宽度和高度的比例值

    最新整理-中国各、省、市、县、乡镇基尼系数数据(到2023年)

    ## 一、数据介绍 数据名称:中国各、省、市、县、乡镇基尼系数数据 数据年份:1992-2023年 样本数量:92064条 数据格式:面板数据 ## 二、指标说明 共计10个指标:年份、省、省代码、市、市代码、县、县代码、乡镇、乡镇代码、夜间灯光基尼系数 ## 三、数据文件 中国各乡镇基尼系数(基于夜间灯光数据)2000-2023年.dta; 中国各区县基尼系数(基于夜间灯光数据)2000-2023年.dta; 中国各城市基尼系数(基于夜间灯光数据)2000-2023年.dta; 中国各省份基尼系数(基于夜间灯光数据)2000-2023年.dta

    【java毕业设计】学业帮扶管理系统源码(ssm+mysql+说明文档).zip

    环境说明: 开发语言:Java 框架:ssm,mybatis JDK版本:JDK1.8 数据库:mysql 5.7及以上 数据库工具:Navicat11及以上 开发软件:eclipse/idea Maven包:Maven3.3及以上 服务器:tomcat7及以上

    【java毕业设计】毕业生生活用品出售网站系统源码(ssm+mysql+说明文档+LW).zip

    功能说明: 系统主要包括管理员,商家和用户三大模块 (a) 管理员;管理员进入系统主要功能包括个人中心,用户管理,商家管理,用品分类管理,用品信息管理,系统管理,订单管理等功能并进行操作。 (b) 商家;商家进入系统主要功能包括个人中心,用品信息管理,订单管理等功能并进行操作。 (c) 用户;用户进入系统主要功能包括个人中心,我的收藏管理等功能并进行操作。 环境说明: 开发语言:Java 框架:ssm,mybatis JDK版本:JDK1.8 数据库:mysql 5.7及以上 数据库工具:Navicat11及以上 开发软件:eclipse/idea Maven包:Maven3.3及以上 服务器:tomcat7及以上

    最新行政区划、乡镇级矢量地图及2022年道路、水系、建筑轮廓数据(shp格式)-已更至最新.zip

    最新行政区划、乡镇级矢量地图及2022年道路、水系、建筑轮廓数据(shp格式)-已更至最新.zip

Global site tag (gtag.js) - Google Analytics