java---构造器

Posted 小白爷

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java---构造器相关的知识,希望对你有一定的参考价值。

public class SomeTrying{
    
    
    public static void main(String[] args){
        new Son();
        new Son().Father();        
    }
}
 
 class Father{  
         //父类Father的无参构造函数
        public Father (){  
            System.out.println("Father Construtor");  
        }  
      //父类Father的带参构造函数 ,构造函数不是成员函数,它只代表类本身,所以一个类可以有多个构造函数
        public Father (int x){  
            System.out.println("Father Construtor " + x);  
        }  
         
      /*  父类Father的成员函数,就是类中的普通函数,所以是不可以重复的,如果再写一个如下,
       * 编译器会报 Duplicate method Father() in type Father 错误,原因是两个成员函数发生了冲突。
       public int Father (){  
            System.out.println("Father member function");  
      */
        
        public void Father (){  
            System.out.println("Father member function");  
        }  
    }  
     
     
     //类son是继承父类Father的子类
    class Son extends Father {  
        //在子类的构造函数中调用父类构造函数,
        public Son (){  
            super(1);  
            System.out.println("Son Construtor");  
        }  
       
        //重写父类的成员函数
        public void Father(){  
            System.out.println("Inherited Father member function.");  
            super.Father();  
        }  
    } 

1、因为类中显式的声明了一个带参数构造器,所以默认的构造器就不存在了,但是你在子类的构造器中并没有显式的调用父类的构造器(创建子类对象的时候,一定会去调用父类的构造器,这个不用问为什么),没有显式调用的话,虚拟机就会默认调用父类的默认构造器,但是此时你的父类的默认构造器已经不存在了,这也就是为什么父类中必须保留默认构造器的原因。

 PS.应该养成良好的编程习惯,任何我们自己定义的类,都显式的加上默认的构造器,以后更深入的学习之后,会发现有很多好处

方法重写规则

  • 参数列表必须完全与被重写方法的相同;
  • 返回类型必须完全与被重写方法的返回类型相同;
  • 访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类的一个方法被声明为public,那么在子类中重写该方法就不能声明为protected。
  • 父类的成员方法只能被它的子类重写。
  • 声明为final的方法不能被重写。
  • 声明为static的方法不能被重写,但是能够被再次声明。
  • 子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为private和final的方法。
  • 子类和父类不在同一个包中,那么子类只能够重写父类的声明为public和protected的非final方法。
  • 重写的方法能够抛出任何非强制异常,无论被重写的方法是否抛出异常。但是,重写的方法不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异常,反之则可以。
  • 构造方法不能被重写。
  • 如果不能继承一个方法,则不能重写这个方法

参考:http://www.runoob.com/java/java-override-overload.html

   http://blog.csdn.net/yuxiaohui78/article/details/43887373

   http://www.cnblogs.com/by-dream/p/3967123.html

以上是关于java---构造器的主要内容,如果未能解决你的问题,请参考以下文章

无法解析片段中的 ViewModelProvider 构造?

Android 逆向ART 脱壳 ( DexClassLoader 脱壳 | DexClassLoader 构造函数 | 参考 Dalvik 的 DexClassLoader 类加载流程 )(代码片段

Android 逆向ART 脱壳 ( DexClassLoader 脱壳 | DexClassLoader 构造函数 | 参考 Dalvik 的 DexClassLoader 类加载流程 )(代码片段

Java如何快速构造JSON字符串

使用java.lang.Exception的错误:测试类应该只有一个公共构造函数

创建一个叫做机动车的类: 属性:车牌号(String),车速(int),载重量(double) 功能:加速(车速自增)减速(车速自减)修改车牌号,查询车的载重量。 编写两个构造方法:一个没有(代码片段