精华内容
下载资源
问答
  • Java中构造方法继承问题

    千次阅读 2018-09-26 14:13:05
    1.父类的构造方法是不会被子类继承的,但是子类的构造方法中会有一个隐式的super()来调用父类的无参数构造方法。 验证代码如下: public class FatherClass { int a; int b; public FatherClass() { a ...

    1.父类的构造方法是不会被子类继承的,但是子类的构造方法中会有一个隐式的super()来调用父类中的无参数构造方法。
    验证代码如下:

    public class FatherClass {
    	int a;
    	int b;
    	public FatherClass() {
    		a = 10;
    	}
    	public FatherClass(int b) {
    		this.b = b;
    	}
    
    	public void getClassName(){
    	System.out.println("我是FatherClass");
    	}
    }
    
    public class Test extends FatherClass{
    	
    	public static void main(String[] args) {
    		Test t = new Test();
    		System.out.println(t.a);
    		System.out.println(t.b);
    	}
    	@Override
    	public void getClassName(){
    		System.out.println("我是Test");
    	}
    }
    
    

    执行Test类,输出结果是10和0。

    上面代码在内存中的执行过程如下图(我只画了堆中的内存变化):

    在这里插入图片描述

    2.如果子类调用了父类的有参构造方法,就不会再有隐式super()的调用父类的无参构造了

    public class FatherClass {
    	int a;
    	int b;
    	public FatherClass() {
    		a = 10;
    	}
    	public FatherClass(int b) {
    		this.b = b;
    	}
    }
    
    public class Test extends FatherClass{
    	public Test(int b) {
    		super(b);
    	}
    	
    	public static void main(String[] args) {
    		Test t = new Test(10);
    		System.out.println(t.a);
    		System.out.println(t.b);
    	}
    }
    
    

    输出结果0和10

    3.抽象类本身不能被实例化,但是可以有构造方法。

    展开全文
  • java构造方法继承

    千次阅读 2011-05-23 11:13:00
     java 构造方法继承   这是摘抄别人的读书笔记,希望能够对大家学习java有所帮助。 所有代码都经过测试,测试环境: java version "1.4.0-rc" Java(TM) 2 Runtime ...

      java 构造方法的继承
     
    这是摘抄别人的读书笔记,希望能够对大家学习java有所帮助。
    所有代码都经过测试,测试环境:
    java version "1.4.0-rc"
    Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.0-rc-b91)
    Java HotSpot(TM) Client VM (build 1.4.0-rc-b91, mixed mode)
    如大家发现任何错误,或有任何意见请不吝赐教。

    缺省构造函数的问题:base类是父类,derived类是子类,首先要
    说明的是由于先有父类后有子类,所以生成子类之前要首先有父类。
    class是由class的构造函数constructor产生的,每一个class都有
    构造函数,如果你在编写自己的class时没有编写任何构造函数,那么
    编译器为你自动产生一个缺省default构造函数。这个default构造函数
    实质是空的,其中不包含任何代码。但是一牵扯到继承,它的问题就出现
    了。

    如果父类base class只有缺省构造函数,也就是编译器自动为你产生的。
    而子类中也只有缺省构造函数,那么不会产生任何问题,因为当你试图产生
    一个子类的实例时,首先要执行子类的构造函数,但是由于子类继承父类,
    所以子类的缺省构造函数自动调用父类的缺省构造函数。先产生父类的实例,
    然后再产生子类的实例。如下:

    class base{
    }
    class derived extends base{
    public static void main(String[] args){
    derived d=new derived();
    }
    }

    下面我自己显式地加上了缺省构造函数:
    class base{
    base(){
    System.out.println("base constructor");
    }
    }
    class derived extends base{
    derived(){
    System.out.println("derived constructor");
    }
    public static void main(String[] args){
    derived d=new derived();
    }
    }

    执行结果如下:说明了先产生base class然后是derived class。
    base constructor
    derived constructor

    我要说明的问题出在如果base class有多个constructor
    而derived class也有多个constructor,这时子类中的构造函数缺省
    调用那个父类的构造函数呢?答案是调用父类的缺省构造函数。
    但是不是编译器自动为你生成的那个缺省构造函数而是你自己显式地
    写出来的缺省构造函数。

    class base{
    base(){
    System.out.println("base constructor");
    }
    base(int i){
    System.out.println("base constructor int i");
    }
    }
    class derived extends base{
    derived(){
    System.out.println("derived constructor");
    }
    derived(int i){
    System.out.println("derived constructor int i");
    }
    public static void main(String[] args){
    derived d=new derived();
    derived t=new derived(9);
    }
    }

    D:/java/thinking/think6>java derived
    base constructor
    derived constructor
    base constructor
    derived constructor int i

    如果将base 类的构造函数注释掉,则出错。

    class base{
    // base(){
    // System.out.println("base constructor");
    // }
    base(int i){
    System.out.println("base constructor int i");
    }
    }
    class derived extends base{
    derived(){
    System.out.println("derived constructor");
    }
    derived(int i){
    System.out.println("derived constructor int i");
    }
    public static void main(String[] args){
    derived d=new derived();
    derived t=new derived(9);
    }
    }


    D:/java/thinking/think6>javac derived.java
    derived.java:10: cannot resolve symbol
    symbol : constructor base ()
    location: class base
    derived(){
    ^
    derived.java:13: cannot resolve symbol
    symbol : constructor base ()
    location: class base
    derived(int i){
    2 errors

    说明子类中的构造函数找不到显式写出的父类中的缺省
    构造函数,所以出错。

    那么如果你不想子类的构造函数调用你显式写出的父类中的缺省
    构造函数怎么办呢?
    如下例:

    class base{
    // base(){
    // System.out.println("base constructor");
    // }
    base(int i){
    System.out.println("base constructor int i");
    }
    }
    class derived extends base{
    derived(){
    super(8);
    System.out.println("derived constructor");
    }
    derived(int i){
    super(i);
    System.out.println("derived constructor int i");
    }
    public static void main(String[] args){
    derived d=new derived();
    derived t=new derived(9);
    }
    }


    D:/java/thinking/think6>java derived
    base constructor int i
    derived constructor
    base constructor int i
    derived constructor int i

    super(i)表示父类的构造函数base(i)请大家注意
    一个是super(i)一个是super(8)。
    大家想想是为什么??

    结论:子类如果有多个构造函数的时候,父类要么没有构造函数,
    让编译器自动产生,那么在执行子类构造函数之前先执行编
    译器自动产生的父类的缺省构造函数;要么至少要有一个显
    式的缺省构造函数可以让子类的构造函数调用。

    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zgzhjj001/archive/2008/04/03/2247983.aspx

    展开全文
  • JAVA中构造方法可以用什么来修饰

    千次阅读 2019-08-29 19:38:22
    不同于普通方法,构造方法(器)不能是abstract, static, final, native, strictfp, 或者synchronized的。原因如下: 构造器不是通过继承得到的,所以没有必要把它声明为final的。 同理,一个抽象的构造器将永远...

    不同于普通方法,构造方法(器)不能是abstract, static, final, native, strictfp, 或者synchronized的。原因如下:

    1. 构造器不是通过继承得到的,所以没有必要把它声明为final的。

    2. 同理,一个抽象的构造器将永远不会被实现。(所以也不能声明为abstract的)

    3. 构造器总是关联一个对象而被调用,所以把它声明为static是没有意义的。

    4. 没有实际的需要把构造器定义成同步的,因为它将会在构造的时候锁住该对象,直到所有的构造器完成它们的工作,这个构造的过程对其它线程来说,通常是不可访问的。

    5. 本地化的方法情况特别复杂,所以JVM调用起来非常麻烦,需要考虑很多种情况,没有native关键字的情况下,JVM实现起来比较容易。

    一般用public、protected、private来修饰构造方法。

    展开全文
  • Java基础入门笔记-构造方法继承

    千次阅读 2018-01-05 16:33:35
    Java基础入门笔记-构造方法继承

    代码如下所示:

    Child.java

    package my;
    
    public class Child extends Parent
    {
    	public  Child() {
    		System.out.println("Child构造函数!");
    	}
    }



    Parent.java

    package my;
    
    public class Parent
    {
    	int a;
    	public  Parent() {
    		System.out.println("Parent无参构造函数!");
    	}
    	public  Parent(int a) {
    		this.a=a;
    		System.out.println("Parent有参构造函数!");
    	}
    	
    }
    



    HelloWord.java

    package my;
    
    public class HelloWorld
    {
    
    	public static void main(String[] args)
    	{		
    		Child a=new Child();
    		
    	}
    
    }
    


    运行结果如下图:


    (根据下断点可知道,他先执行了Child构造方法但没有执行里面的内容,然后去执行Parent的个构造方法和内容,再执行Child的内容)


    现在要指定Parent的构造方法

    修改Child.java如下所示:

    package my;
    
    public class Child extends Parent
    {
    	public  Child() {
    		super(1);
    		System.out.println("Child构造函数!");
    	}
    }
    

    运行结果如下图:


    展开全文
  • Java基础】java继承中构造方法

    千次阅读 热门讨论 2018-02-20 21:32:16
    小编现在学习了一下继承中构造方法,觉得还是总结一下比较好。【特点】1、子类的构造的过程中必须调用其基类的构造方法。2、子类可以在自己的构造方法中使用super(argument_list)调用基类的构造方法。3、如果子类...
  • Java构造方法继承的一点理解

    千次阅读 2016-12-16 10:29:51
    1.Java中所有的类都是继承自Object(不要以为你写一个类没有写 extends Object 就以为你没有继承了,一定要有这个概念),Object类有个一个无参构造方法,所以我们在写一个类的时候如果没有添加构造方法Java
  • java继承中构造方法

    千次阅读 2016-07-07 16:31:14
    javase知识都快忘光了!! 以后一定要多写点儿总结!!!! 代码: SonClass.java ... System.out.println("Father--默认构造方法"); } public FatherClass(int c) { System.out.println("Father--有
  • public class Father { //年龄 private int age;... //仅有一个带参数的构造方法 public Father (int i){ this.age = i; System.out.println("实例化父类 ag = " + age); } public Father
  • 一、为什么要引入构造方法。 当创建对象的时候需要对属性值初始化,构造方法,即对象创建时要执行的方法。 要求在实例化的同时,就指定好name,和age的值。这就要用到构造方法。又叫做构造器Constructor. 二、构造...
  • [Java基础]Java中抽象类和接口构造方法吗?

    万次阅读 多人点赞 2017-07-05 10:56:13
    1.时间:2017-07-05 10:25:44 YuanMxy ...①在接口可以构造方法 在接口里写入构造方法时,编译器提示:Interfaces cannot have constructors。 A. 构造方法用于初始化成员变量,但是接口成员变量是
  • Java继承关系下的构造方法调用

    千次阅读 2015-03-19 16:24:47
    Java中创建一个类的对象时,如果该类存在父类,则先调用父类的构造方法,然后再调用子类的构造方法。本文描述子类如何调用父类的构造方法
  • Java中类的构造方法

    万次阅读 多人点赞 2016-10-20 23:17:50
    new对象时,都是用构造方法进行实例化的; 例如;Test test = new Test("a"); //Test("a");其中这个就是构造函数,“a”为构造方法的形参;构造方法的方法名必须与类名一样。 构造方法没有返回类型,也不能...
  • Java构造方法和子类构造方法

    千次阅读 多人点赞 2019-07-21 23:50:09
    Java构造方法 构造方法是用于初始化一个新建的对象。 普通构造方法 方法名与类名相同 无返回类型 子类不能继承父类的构造方法 不能被static、final、abstract修饰(有final和abstract修饰的是不能被子类继承的,...
  • 方法重写: 具有相同的方法名称,返回类型和参数列表(特别容易出错) 重写方法不能使用比被重写方法更严格的访问权限。...继承中构造方法 1.子类的构造过程中必须调用其父类(基类)的构造方法(没有父类就没
  • 理解 Java 构造函数不可以继承

    千次阅读 2018-05-27 22:41:26
    今天回顾Java中一个比较重要的知识点,即父类构造函数是否可以被子类继承的问题。之前我的理解是:子类对象的创建是在父类对象创建之后开始的,子类的“出生”,前提是拥有一个父类的对象。因此子类的构造方法中,...
  • java类的继承构造方法

    千次阅读 2018-10-28 14:21:50
    我们可以看出来,大学生类的属性和方法包含了学生类的属性与方法,如果我们在定义这两个类的时候将它们的属性和方法全部定义一遍,就显得麻烦同时不精简,由此继承的概念就出来了。 继承:如果A类继承了B类,我们将...
  • Java中构造方法调用顺序的理解

    千次阅读 2018-06-08 17:02:34
    ​ 之前对构造函数的调用顺序一直很迷,只知道很死板地记着“父类构造函数先于子类构造函数调用”,但是其中的原因并没有去深究。前几周大概看了一遍JAVA编程思想,真的是博大精深……但是对这个概念起码有了一点...
  • java中子类会继承父类的构造方法吗?

    万次阅读 多人点赞 2015-10-23 21:26:03
    java中子类能继承父类的构造方法吗?带着这个疑问我们首先来看个例子: 子类不会继承父类的构造方法,但是子类在实例化对象时:如果子类的构造器没有显示的调用父类的方法,则将自动调用父类默认的构造器。如果...
  • 要区分Java中构造器(构造方法/Constructor)和方法的区别,需要掌握下面几个要点: 修饰符 构造器:不能用abstract、final、native、static修饰 方法:可以用各种修饰符修饰 返回值 构造器:无返回值,也无void 方法...
  • !...创建子类对象时,Student s = new Student("school"); 该构造方法中没有显示调用父类的 构造方法,但还是编译成功了,!...该构造方法调用自身的构造函数,此构造函数有调用父类的构造方法,执行成功的原因是什么
  • java构造方法

    千次阅读 2017-04-18 11:43:03
    1.简介构造一个类的实例时, 将会调用沿着继承链的所有父类的构造方法。 当构造一个子类的对象时, 子类构造方法会在完成自己的任务之前, 首先调用它的父类的构造方法。 如果父类继承自其他类, 那么父类构造方法又...
  • java构造方法

    千次阅读 2019-05-01 14:56:49
    1 构造方法可以被重载,一个构造方法可以通过this关键字调用另一个...2 当一个类没有定义任何构造方法Java将自动提供一个缺省构造方法; 3 子类通过super关键字调用父类的一个构造方法; 4 当子类的某个构造...
  • Java中构造方法

    万次阅读 多人点赞 2018-08-10 10:54:20
    构造方法分为无参构造方法、有参构造方法。  概念:构方法是一种特殊的“成员方法”  1,构造方法作用:(1)构造出来一个类的实例 (2)对构造出来个一个类的实例(对象)初始化  2,构造方法的名字必须与定义他的...
  • java中构造方法详细解释

    千次阅读 2018-07-05 20:50:56
    java中构造方法是用来初始化一个对象的,并为为实例变量赋予合适的初始值。因此构造方法不需要返回类型。  构造方法必须满足以下语法规则:  (1)方法名必须与类名相同;  (2)不要声明返回类型;  (3)不能...
  • java中子类能不能继承父类构造方法

    千次阅读 2018-03-11 10:27:32
    首先来看一下下面这个例子: ... 所以父类构造方法是不能继承的,但是在实例化子类的时候会调用父类的构造方法,这样就能解释下面这种情况了。面试题目1:指出下面程序的运行结果:public class Test { pub...
  • 构造方法能被继承

    千次阅读 2017-07-12 16:21:52
    不能,因为如果子类继承了父类的构造方法,父类的构造在子类不符合构造方法的规则,也不符合一般方法的规则。  父类的构造在子类没有返回类型,方法名也与子类的类名不相同。不符合java语法规范。
  • Java中构造方法总结

    万次阅读 多人点赞 2013-11-05 19:20:18
    构造方法和实例方法的区别: ... ,都可以构造方法进行修饰。不同于实例方法的是构造方法不能有任何非访问性质的修饰符修饰,例如static、final、synchronized、abstract等都不能修饰构造方法。 解释:构造

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 491,922
精华内容 196,768
关键字:

java中构造方法可以继承吗

java 订阅