构造方法:百度百科给出的定义为(构造方法是一种特殊的方法,它是一个与类同名且返回值类型为同名类类型的方法。对象的创建就是通过构造方法来完成,其功能主要是完成对象的初始化。当类实例化一个对象时会自动调用构造方法。构造方法和其他方法一样也可以重载。)
由定义不难理解:
1.构造方法的作用是给对象进行初始化 。
2.构造方法的格式,
(1).方法名与类名相同,
(2).没有返回值类型,连void都没有。
(3).没有具体的返回值。
参考博客:https://blog.csdn.net/java2000_net/article/details/2902058
3.构造函数可以重载。
构造方法注意事项:
1.如果我们不提供构造函数,系统也会给出默认无参的构造函数
2.相应的,如我们给出构造方法,系统将不会再提供默认的无参构造方法。
attention:如果此时我们此时已经提供了构造方法,不管是有参还是无参,系统都不会再提供构造方法,如果我们此时还想使用无参构造方法,只能自己提供,这里建议永远自己提供无参构造方法,以防止在做大项目时出一些不必要的错误。
构造方法的重载:
class Student{
private String name;
private int age;
public Student(){
System.out.println("hello");
}
public Student(String name){
this.name=name;
}
public Student(String name,int age){
this.name=name;
this.age=age;
}
public void show(){
System.out.println(name+"----"+age);
}
}
public class ConstructDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
Student s=new Student();
s.show();
Student s1=new Student("林青霞", 27);
s1.show();
System.out.println("--------------");
Student s2=new Student("林青霞");
s2.show();
}
}
结果为:
构造方法的重载是指:
重载是同一个方法名(包括构造函数)的多种不同实现
所谓的不同实现,是指参数的个数或类型的不同,返回类型可同也可不同
系统会给构造参数示例:
class Student{
// private String name;
// private int age;
public Student(){
System.out.println("hello");
}
}
public class ConstructDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
Student s=new Student();
}
}
控制台输出结果为:
此时由反编译工具可得:
反编译软件网站:http://www.blogjava.net/Files/96sd2/XJad2.2.rar
系统已经自己给出了构造方法,圈出的地方即为系统提供的构造方法。
系统不会提供构造方法的示例:
class Student{
private String name;
private int age;
// public Student(){
// System.out.println("hello");
// }
public Student(String name){
this.name=name;
}
public Student(String name,int age){
this.name=name;
this.age=age;
}
public void show(){
System.out.println(name+"----"+age);
}
}
public class ConstructDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
Student s=new Student();
s.show();
Student s1=new Student("林青霞", 27);
s1.show();
System.out.println("--------------");
Student s2=new Student("林青霞");
s2.show();
}
}
此时系统会报错,报错信息为:
即,构造方法Student()未定义,所以当我们已经出给构造方法之后(无论一个或是多个),系统就不会再给出构造方法。
Java中方法的重写:
父类中私有方法不能重写。
子类重写父类方法是访问权限不能更低,最好相同。
若权限降低,
package com.company;
class Father {
public void show(){
System.out.println("show Father");
}
}
class Son extends Father{
void show(){
System.out.println("show son");
}
}
public class jicheng_biduan {
public static void main(String[] args) {
Son son = new Son();
son.show();
}
}
报错信息为:
方法重写的条件:
参数列表必须完全与被重写方法的相同;
返回类型必须完全与被重写方法的返回类型相同;
访问级别的限制性一定不能比被重写方法的强;
访问级别的限制性可以比被重写方法的弱;
重写方法一定不能抛出新的检查异常或比被重写的方法声明的检查异常更广泛的检查异常
重写的方法能够抛出更少或更有限的异常(也就是说,被重写的方法声明了异常,但重写的方法可以什么也不声明)
不能重写被标示为final的方法;
如果不能继承一个方法,则不能重写这个方法。
重写VS重载:
1、重载是一个编译期概念、重写是一个运行期间概念。
2、重载遵循所谓“编译期绑定”,即在编译时根据参数变量的类型判断应该调用哪个方法。
3、重写遵循所谓“运行期绑定”,即在运行的时候,根据引用变量所指向的实际对象的类型来调用方法
4、因为在编译期已经确定调用哪个方法,所以重载并不是多态。而重写是多态。重载只是一种语言特性,是一种语法规则,与多态无关,与面向对象也无关。(注:严格来说,重载是编译时多态,即静态多态。但是,Java中提到的多态,在不特别说明的情况下都指动态多态)
补充:
给成员变量赋值的两种方法
(1).setXxx()方法
(2).构造方法
补充2:
new一个对象的时候要用到构造函数,例如Student student = new Student();这时调用的是Hello的无参数构造方法;Student student = new Student ("hi");这个是调用Student 有参数构造方法,在JAVA中如果不写构造方法的话,会默认加上一个无参数的构造方法,但是如果已经有了一个有参数的构造方法,那么无参数的构造方法就不会默认被加上.如果Student 类中已经有了一个有参数的构造方法,这时再使用 Student student = new Student ();来创建对象的时候就会出错,这就是为什么书上要强调写了有参数的构造方法就最好加一个无参数的构造方法。