继承中无参构造的用法
来源:互联网 发布:快典网藏头诗软件 编辑:程序博客网 时间:2024/05/16 09:46
最近学习无参构造和继承,总结出来一些经典编程问题,供大家分享.
例一
class TestA{ public TestA(){ System.out.println("A"); } }class TestB extends TestA{ public TestB(){ System.out.println("B"); }}public class Test{ public static void main(String args[]){ TestB testB=new TestB(); }}
写出上面程序的运行结果,我毫不犹豫的写了个B,回来运行了一下,输出的而是AB,以前我一直以为只有在子类的构造方法调用super()语句的时候才会调用父类的构造方法,看来不是这样的,子类会自动调用父类的无参构造函数。再看下面的例子:
例二:
class TestA{ public TestA(String s){ System.out.println("A"); System.out.println(s); }}class TestB extends TestA{ public TestB(){ System.out.println("B"); }}public class Test{ public static void main(String args[]){ TestB testB=new TestB(); }}
编译上面的程序,看有什么错误提示,如果没有意外的话,会有下面的错误提示:
———- javac ———-
C:\Users\Administrator\Desktop\Test.java:8: 错误: 无法将类 TestA中的构造器 TestA应用到给定类型;
public TestB(){
^
原因在于当我们没有给出构造方法是,系统会自动提供一个无参构造方法;如果我们给出了构造方法,系统将不再默认提供无参构造方法.而在这个例子中,我们在父类中写了一个有参构造,当执行这条语句时TestB testB=new TestB(); 系统会默认在子类无参构造方法中访问父类无参构造方法,但父类没有无参构造方法,所以报错.但是此时TestA中只有一个TestA(String s),只要在TestA中加上”public TestA(){}”即可,或者在TestB的构造函数中加上”super(“xxx”)便不会调用TestA的无参构造函数而是调用TestA的有参构造函数。从这里我们还应该能看出,当我们在一个类中定义了自己的带参数的构造方法的时候,必须把无参构造函数定义一下。
例三:
class P { public static void main(String[] args) { Father f = new Son(); f.print(); }}abstract class Father { public Father(){ System.out.println("father"); } public abstract void print();}class Son extends Father { public void print(){ System.out.println("son"); }}
运行结果:father son,在子类中没有无参构造函数,系统会自己在子类中创建一个无参构造方法,并且访问父类无参构造方法.
例四:
class TestA{ public TestA(){ System.out.println("A"); } } class TestB extends TestA{ public static TestB(){ System.out.println("B"); } } public class Test{ public static void main(String[] args){ TestB testB=new TestB(); } }
———- javac ———-
C:\Users\Administrator\Desktop\Test.java:8: 错误: 此处不允许使用修饰符static
public static TestB(){
^
java中构造方法可以有任何访问的修饰符,public、private、protected或者没有修饰符 ,都可以对构造方法进行修饰。不同于实例方法的是构造方法不能有任何非访问性质的修饰符修饰,例如static、final、synchronized、abstract等都不能修饰构造方法。
解释:构造方法用于初始化一个实例对象,所以static修饰是没有任何意义的;多个线程不会同时创建内存地址相同的同一个对象,所以synchronized修饰没有意义;
构造方法不能被子类继承,所以final和abstract修饰没有意义。
2、返回类型是非常重要的,实例方法可以返回任何类型的值或者是无返回值(void),而构造方法是没有返回类型的,void也不行。
3、至于命名就是构造方法与类名相同,当然了实例方法也可以与类名相同,但是习惯上我们为实例方法命名的时候通常是小写的,另一方面也是与构造方法区分开。
而构造方法与类名相同,所以首字母一般大写。
- 继承中无参构造的用法
- 继承中无参构造的用法
- 关于子类继承父类的构造函数用法
- 构造方法的继承
- 继承的构造方法
- 构造器的继承
- 构造器的继承
- 构造函数的继承
- 继承的构造函数
- 构造函数的继承
- 构造函数的继承
- 继承的构造方法
- 构造函数的继承
- 构造函数的继承
- JAVA继承,构造函数的执行以及super(),super的用法
- 构造函数的继承(非构造函数的继承)
- Java中子类继承构造方法 和 super this用法的一个总结
- 构造函数的继承问题
- 文章标题
- AJAX
- Linux学习之二十四(硬盘管理及文件系统管理:fdisk/mke2fs/tune2fs)
- 判断RecycleView是否滑动到底部
- 欢迎使用CSDN-markdown编辑器
- 继承中无参构造的用法
- 性能测试
- python IDE(Integrated Develope Environment集成开发环境)
- centos : yacc&lex gcc cannot find -ll/-lfl
- 543. Diameter of Binary Tree
- 人工智能、机器学习和神经网络 你真的知道它是什么意思吗
- hdoj1058 Humble Numbers(值得注意的简单题)
- 【IO流】BufferedReader,BufferedWriter处理流(缓冲流)按行读取
- Linux学习之二十五(Linux文档压缩及归档,gz/bz2/xz/zip/Z)