来源:蜘蛛抓取(WebSpider)
时间:2015-08-06 07:18
标签:
调用父类的构造方法
java中在调用有参构造方法时,是不是能自动调用无参构造方法吗?_百度知道
java中在调用有参构造方法时,是不是能自动调用无参构造方法吗?
系统不会在调用有参构造方法的时候自动调用无参构造方法。需要自己手工实现1、在有参构造函数中调用无参构造函数例如:public&class&TA{&&&public&TA(){//定义无参构造函数&&&}&&&public&TA(int&a){//定义有参构造函数&&&&&&this();//调用无参构造函数&&&}}
其他类似问题
为您推荐:
提问者采纳
你调用有参构造函数的时候是通过类对象调用,调用前已经先new了一个对象,无参构造函数是在你new的时候自动调用的,一般做一些初使化之类的操作你理解有点偏差
提问者评价
呵呵,懂了,谢谢
构造方法的相关知识
其他1条回答
。呵呵 在含有有参构造器的类中 要手动加入无参构造器的(没有有参构造器时不用)看来这一点你是知道的。。等 那就要看你有没有给参数了总之 也就是说你要建立一个有鼻子有眼睛的people 至少要是一个人然后给他加上鼻子和眼睛所谓构造器就是说用来构建对象的在你new对象的时候就会默认被调用的是无参构造器比如说你要new一个people默认调用无参构造器也就是说已经给你了一个people 至于他有没有鼻子和眼睛
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁java问题:为什么方法中不能用this调用构造方法?_百度知道
java问题:为什么方法中不能用this调用构造方法?
先你要明白this的作用域。。,只能在里面用不能再外面用;其他不可以的。构造方法是在new对象的时候自动运行的,你想用this调构造方法。。。,构造方法你可以这么写this.age=age
采纳率100%
其他类似问题
为您推荐:
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁当前位置:& >
> java入门与加深(下)
java入门与加深(下)
五、&面向对象篇 34&extends和implements有什么不同? 答:extends用于(单)继续一个类(class),而implements用于实现一个接口(interface)。
interface的引入是为了部分地提供多继续的功能。在interface中只需声明方法头,而将方法体留给实现的class来做。这些实现的class的实例完全可以当作interface的实例来对待。有趣的是在interface之间也可以声明为extends(单继续)的关系。 35&Java怎么实现多继续? 答:java不支持显式的多继续。因为在显式多继续的语言例如c++中,会出现子类被迫声明祖先虚基类构造函数的问题,而这是违反面向对象的封装性原则的。java提供了interface和implements要害字来部分地实现多继续。参见34。 36&abstract是什么? 答:被声明为abstract的方法无需给出方法体,留给子类来实现。而假如一个类中有abstract方法,那么这个类也必须声明为abstract。被声明为abstract的类无法实例化,尽管它可以定义构造方法供子类使用。 37&public,protected,private有什么不同? 答:这些要害字用于声明类和成员的可见性。 public成员可以被任何类访问, protected成员限于自己和子类访问, private成员限于自己访问。 Java还提供了第四种的默认可见性,当没有任何public,protected,private修饰时,成 员是?br&&?一包内可见??br& 类可以用public或默认来修饰。 38&Override和Overload有什么不同? 答:Override是指父类和子类之间方法的继续关系,这些方法有着相同的名称和参数类型。Overload是指同一个类中不同方法(可以在子类也可以在父类中定义)间的关系,这些方法有着相同的名称和不同的参数类型。 39&我继续了一个方法,但现在我想调用在父类中定义的方法。 答:用super.xxx()可以在子类中调用父类方法。 40&我想在子类的构造方法中调用父类的构造方法,该怎么办? 答:在子类构造方法的第一行调用super(...)即可。 41&我在同一个类中定义了好几个构造方法并且想在一个构造方法中调用另一个。 答:在构造方法第一行调用this(...)。 42&我没有定义构造方法会怎么样? 答:自动获得一个无参数的构造方法。 43&我调用无参数的构造方法失败了。 答:假如你至少定义了一个构造方法,就不再有自动提供的无参数的构造方法了。你需要显式定义一个无参数的构造方法。 44&我该怎么定义类似于C++中的析构方法(destrUCtor)? 答:提供一个void&finalize()方法。在Garbarge&Collector回收该对象时会调用该方法。注重实际上你很难判定一个对象会在什么时候被回收。作者从未感到需要提供该方法。 45&我想将一个父类对象转换成一个子类对象该怎么做? 答:强制类型转换。如 public&void&meth(A&a) { B&b&=&(B)a; } 假如a实际上并不是B的实例,会抛出ClassCastException。所以请确保a确实是B的实例 。 46&其实我不确定a是不是B的实例,能不能分情况处理? 答:可以使用instanceof操作符。例如 if(&a&instanceof&B&) { B&b&=&(B)a; } else { ... } 47&我在方法里修改了一个对象的值,但是退出方法后我发现这个对象的值没变! 答:很可能你把传入参数重赋了一个新对象,例如下列代码就会造成这种错误: public&void&fun1(A&a)&//a是局部参数,指向了一个外在对象。 { a&=&new&A();&//a指向了一个新对象,和外在对象脱钩了。假如你要让a作为传出变量,不要写这一句。 a.setAttr(attr);//修改了新对象的值,外在对象没有被修改。 } 基本类型也会出现这种情况。例如: public&void&fun2(int&a) { a&=&10;//只作用于本方法,外面的变量不会变化。 } 六、java.util篇 48&java能动态分配数组吗? 答:可以。例如int&n&=&3;&Language[]&myLanguages&=&new&Language[n]; 49&我怎么知道数组的长度? 答:用length属性。如上例中的&myLanguages.length&就为&3。 50&我还想让数组的长度能自动改变,能够增加/删除元素。 答:用顺序表--java.util.List接口。你可以选择用ArrayList或是LinkedList,前者是数组实现,后者是链表实现。例如:&List&list&=&new&ArrayList();&或是&List&list&=&new&LinkedList();&。 51&什么是链表?为什么要有两种实现? 答:请补习数据结构。 52&我想用队列/栈。 答:用java.util.LinkedList。 53&我希望不要有重复的元素。 答:用集合--java.util.Set接口。例如:Set&set&=&new&HashSet()。 54&我想遍历集合/Map。 答:用java.util.Iterator。参见API。 55&我还要能够排序。 答:用java.util.TreeSet。例如:Set&set&=&new&TreeSet()。放进去的元素会自动排 序。 你需要为元素实现Comparable接口,还可能需要提供equals()方法,compareTo()方法,hashCode()方法。 56&但是我想给数组排序。 答:java.util.Arrays类包含了sort等实用方法。 57&我想按不同方法排序。 答:为每种方法定义一个实现了接口Comparator的类并和Arrays综合运用。 58&Map有什么用? 答:存储key-value的要害字-值对,你可以通过要害字来快速存取相应的值。 59&set方法没问题,但是get方法返回的是Object。 答:强制类型转换成你需要的类型。参见45。 60&我要获得一个随机数。 答:使用java.util.Random类。 61&我比较两个String总是false,但是它们明明都是"abc"&! 答:比较String一定要使用equals或equalsIgnoreCase方法,不要使用&==&!==比较的是两个引用(变量)是否指向了同一个对象,而不是比较其内容。&您所在的位置: &
无参数构造方法的定义和使用
无参数构造方法的定义和使用
清华大学出版社
《Java开发技术大全》第3章对象和类,本章将介绍面向对象的基本知识和Java实现面向对象程序设计的主要工具--类。如果读者缺乏关于面向对象程序设计的背景,一定要仔细地阅读本章。本节为大家介绍无参数构造方法的定义和使用。
3.6.1& 无参数构造方法的定义和使用
定义一个无参数的构造方法,从语法上来讲很简单,请看下面的示例。
【例3.20】 无参数的构造方法示例。
//-----------文件名constructNoPara.java,程序编号3.31-----------------public class constructNoPara{private int& x = 0;//定义一个无参数的构造方法,它必须和类同名public constructNoPara(){System.out.println("这是无参数的构造方法");x = 100;&&&&&&&& //为成员变量赋值}//获取成员变量x的值public int getX(){}public static void main(String args[]){constructNoPara oa = new constructNoPara();&& //隐式调用无参数的构造方法System.out.println("x = " + oa.getX() );&&&&&& //输出成员变量x的值}}
调用构造方法使用的是"new constructNoPara()",这是一种隐式的调用方法,不能写成"oa.constructNoPara()"的形式。
注意到成员变量x,它在定义的时候已经赋了初值。在构造方法中,先是输出一条信息,然后再次为x赋值。由于构造方法的执行在定义成员变量之后,它会覆盖掉原来x的初值,所以x的值为100。程序的输出结果如下:
这是无参数的构造方法x = 100
对于初学者而言,最容易犯的错误是在构造方法之前加上"void",变成下面这个样子:
public class constructNoPara{private int& x = 0;//试图定义一个无参数的构造方法public void constructNoPara(){&//这里加了一个voidSystem.out.println("这是无参数的构造方法");x = 100;&&&&&&&//为成员变量赋值}//获取成员变量x的值public int getX(){}public static void main(String args[]){constructNoPara oa = new constructNoPara();&& //隐式调用无参数的构造方法System.out.println("x = " + oa.getX() );&&&&&& //输出成员变量x的值}}这个程序仍然可以通过编译,但运行结果可能会出人意料。它的输出结果如下:
这表明,程序员自己定义的无参数的构造方法根本就没有执行。这是因为加上"void"修饰符之后,constructNoPara()不再是一个构造方法,而成了一个普通方法。
语句"constructNoPara oa = new constructNoPara();"并不是调用程序员自己定义的"构造方法",而是调用了系统提供的默认的无参数的构造方法,这个方法其实什么事情也没做,自然也就不会更改x的值。
说明:C++程序员不会犯此类错误。因为在C++中,如果在构造方法前面加上void,编译器将报错。
注意:构造方法前的访问权限修饰符同样有4种,但通常不会是private类型。因为用它来修饰的话,无法在外部使用该构造方法。
【责任编辑: TEL:(010)】&&&&&&
关于&&&&&&的更多文章
jstack--如果java程序崩溃生成core文件,jstack工具可以用来获得
网友评论TOP5
本书描述了黑客用默默无闻的行动为数字世界照亮了一条道路的故事。
Spring 3.0是Spring在积蓄了3年之久后,隆重推出的一
本书以一个工会副主席与EAP培训老师对话讲故事的形式
本书内容理论联系实际,系统化组织。全书由8章组成,
本书是关于Acegi、CAS的权威教程,是Java/Java EE安全性开发者的必备参考书。无论是Java EE安全性编程模型的背景和基础知识,还
51CTO旗下网站