代码-一个JAVA苦手的关于类的问题

问题描述

一个JAVA苦手的关于类的问题

public class Animal{
public Animal(){
}
public void cry(){
System.out.print("crying");
}
}
其中为什么还要再加上public Animal(){ }这一行代码?

解决方案

创建一个子类对象的实例的时候,必先调用父类的无参构造函数(默认构造函数),假如父类有带参数的构造函数,那么系统不会给他创建无参数的构造函数,这时,子类在实例化的时候,因为找不到父类的默认构造函数,编译器会报错,如果在子类的构造函数中指定使用父类的带参数的构造函数的时候,或者在父类中加一个无参数的构造函数的时候,就不会报错了。

我们假设A是B的父类,B是A的子类。
1、如果没有给A类没有提供构造函数,则编译器会自动提供一个默认的构造函数,如果用户提供了自己的构造函数,则编译器不提供默认的构造函数。
2、子类B实例化时会自动调用父类的构造函数,所以如果A的默认的无参数的构造函数为private,则编译器会报错,而如果A没有提供默认的无参数的构造函数,而提供其他的构造函数,编译器同样报错,因为找不到A的默认无参数构造函数。所以我们编程中最好给一个默认的构造函数。
3、或者在B的构造函数中显示的调用父类A的有参构造函数。super(parameter

解决方案二:

 可以不加,默认会有这个构造函数。

解决方案三:

声明一下构造函数是公有的,只有这些代码看不出用途。在有类继承它的时候,才有作用。

解决方案四:

如楼上所说,创建一个子类对象的实例的时候会先调用父类的无参构造函数,如果没有显示的生命的话,系统会默认生成一个。但是当父类中你声明了一个有参数的构造方法,系统就不会生成这个无参的构造方法,这样在子类继承后,穿件对象时就会因为找不到无参构造函数而报错。所以显示的声明无参构造函数是一个好习惯,尽管有时肯能没有什么卵用。求关注。

解决方案五:

这个叫无参构造函数。如果不写也没关系。系统会默认一个无参构造

解决方案六:

每个累都有默认一个没有参数的构造方法,就算你没有写,他其实也是存在的。

解决方案七:

下次记得把有子类说清楚,这样就好解释了。
单独的这个类是没有问题的,不谢无参数构造函数也没事,但是有了继承类,继承类创建实例的时候,因为需要调用父类的无参构造函数所以需要在父类里声明。
看了你的评论,你的子类中应该是有这样一行的:
Dog dog = new Dog();
这个实例因为调用了Dog类的无参数构造函数,需要你声明无参数构造函数Dog,不加会报错,你的Dog类里应该没有有参数的Dog构造函数;
同样,因为你使用了上面的代码,Dog继承了Animal,在构造实例的时候需要调用父类的无参构造函数,如果父类中没有显示声明,会报父类的错。

解决方案八:

无参构造,可以不加,系统会自动配备,但是如果有有参构造函数了,就必须添加无参构造的,至于为啥,我还真是,,说不出来,,话说你知道么= =

解决方案九:

是构造函数,不加,也可以。那是用默认构造函数

解决方案十:

是无参构造器。
public Animal( String param){ // 有参构造器 (带参数 param)
……
}
如果没有 有参构造器的话 ,有没有是一样的,会有无参构造器(默认);
如果有 有参的构造器的话,如果没有写无参的构造器的话,就没有无参的构造器。(不再默认有无参的构造器)。

时间: 2024-12-09 02:30:24

代码-一个JAVA苦手的关于类的问题的相关文章

这是一个java的crc16实现类,请大侠帮我翻译为c语言版

问题描述 这是一个java的crc16实现类,请大侠帮我翻译为c语言版 import java.util.zip.Checksum; public class CRC16Modbus implements Checksum { private static final int[] TABLE = { 0x0000, 0xc0c1, 0xc181, 0x0140, 0xc301, 0x03c0, 0x0280, 0xc241, 0xc601, 0x06c0, 0x0780, 0xc741, 0x0

封装了一个Java数据库访问管理类_java

复制代码 代码如下: package com.groundhog.codingmouse; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; /** * 数据库管理类 * @author CodingMouse * 2009.2.20 */ pub

一个java编程题目,类的设计问题

问题描述 今天去面试,得到的题目是:1.从一个文档中读取内容(文档内容为1-10十个数字,一个数字一行),输出到另外一个文档,输出格式为(1,2,3,...,10)2.数据库中存储了10条记录,一列,也是1-10,一个数字一条记录,读出,也输出到一个文档,格式同第一题.题目的要求是:怎么样设计类,使在开发过程中第一题变到第二题的修改部分较少,代码复用率低.附加:如果是输出到文档,改为输出到数据库的话,怎么设计. 学得不精,只想到了用继承来解决这个问题.还有什么别的设计思路呢? 解决方案 publ

java-怎么获取一个JAVA类中各个方法的代码块

问题描述 怎么获取一个JAVA类中各个方法的代码块 特殊需求:获取一个JAVA类中各个方法的代码块来查找方法中是否包含某个关键字,现在通过发射只能拿到方法的属性和注释,有没有API或者其他方法,求告知,3Q 没金币了..对不起大家 PS:获取本地源代码的,不是运行时的class 解决方案 myeclipse中调试调用带有静态代码块的类时出现java.lang.NoClassDefFoundError的处理方法在DWR中实现直接获取一个JAVA类的返回值的两种方法java代码获取当前类类名.方法名

写了一个Java读取XML文件的工具类

xml 如果我们有下面的一个XML文件,可以把它想象成一个Relation Database中的Table, 这个XML文件就是一个名字为managers的关系表,而一个<manager>所包含的就是一条记录(Record),而manager中的service和implementation就是一个个的栏位(Field) ! managers table  +  service implementation net.csdn.blog.xport.IDBConnectionManager net

问一个Java泛型与类继承的问题

问题描述 问一个Java泛型与类继承的问题 直接上代码了 //DeviceRepository类 public abstract class DeviceRepository<T extends Device> extends DomainRepository<T> //DeviceEventHandler类第一种写法 public abstract class DeviceEventHandler<M extends Device,R extends DeviceRepos

class-请教一个java代码的问题有点看不懂

问题描述 请教一个java代码的问题有点看不懂 如下 abstract public class SafeAction extends Action { protected Log log = LogFactory.getLog(this.getClass()); private static final String CONTENT_TYPE = "text/html; charset=GBK"; private TblConTxnLog tblConTxnLog = null; a

java中为什么只进行一个初始化就会执行类中的函数

问题描述 java中为什么只进行一个初始化就会执行类中的函数 import java.awt.*;import javax.swing.*;import java.awt.event.*;public class E2 extends Frame{ class WindowCloser extends WindowAdapter { public void windowClosing(WindowEvent we) {System.exit(0); } } E2() { super(""

一个JAVA工程中可以有多个主类吗?

问题描述 如题.并请详细解释下.谢谢! 解决方案 解决方案二:不可以.原因是.规定如此.解决方案三:你可以同事写多个主类但是只能允许运行其中的一个主类.解决方案四:逻辑上行不同,程序都需要一个唯一入口,否则系统都不知道你的程序从哪开始.解决方案五:好像不可以吧解决方案六:引用2楼的回复: 你可以同事写多个主类但是只能允许运行其中的一个主类. 就是这样解决方案七:每个class允许存在一个main函数但是实际执行的,只会是其中一个如果是java方式执行,指命令模式java-cp"*.classpa