文章目录

  • 一、方法的分类
  • (1)构造方法
  • (2)类方法
  • (3)实例方法
  • 二、方法重写
  • 三、方法重载
  • 四、方法覆写(重写)与方法重载的区别
  • 五、方法的调用


一、方法的分类

  • 构造方法
  • 类方法
  • 实例方法

(1)构造方法

给出类所创建的对象的初始状态,(给对象的属性赋值) 在创建对象之后自动调用
构造方法的格式:方法名与类名相同,没有返回值
构造方法可以重载但不能重写(覆写)

class person {
    public person(){}    // 默认无参构造方法
    public person(参数列表){}    // 定义构造方法
    …
    // 类主体
}
//方法名必须与类名相同
可以有 0 个、1 个或多个参数
没有任何返回值,包括 void
默认返回类型就是对象类型本身
只能与 new 运算符结合使用
  • 构造方法的作用:初始化类的对象,并返回对象的地址。
    有参构造器在初始化对象时,已经为其赋值了,
    无参构造器在初始化对象时,成员变量的数据均采取默认值
  • 任何类定义出来,默认就带了无参构造方法,写不写都有
    一旦定义了有参构造器,无参构造器就没有了,如果还需要无参构造器,就需要哦自己手动写一个无参构造器

示例:创建一个car类

public class car构造方法 {
    String name;
    double price;
//无参构造器
    public car构造方法(){
        System.out.println("无参构造器被触发执行");
    }
    //有参构造器
    public car构造方法(String n, double p){
        System.out.println("有参构造器被触发且执行");
name=n;
price=p;
    }
}

创建main方法来调用

public class cartest构造方法 {
    public static void main(String[] args) {
        car构造方法 c=new c0car构造方法();
        System.out.println(c.name);
        System.out.println(c.price);

        car构造方法 c2=new c0car构造方法("baoma",88);
        System.out.println(c2.name);
        System.out.println(c2.price);
    }
}

(2)类方法

被static关键字修饰的方法,类方法也称为静态方法

  • 静态方法不需要通过它所属的类的任何实例就可被调用
  • 可以通过类名.类方法来调用类方法
  • 在静态方法中不能使用this和super关键字

不能直接访问所属类的实例变量和实例方法,但是可以直接访问所属类的静态变量和静态方法。

(3)实例方法

除构造方法外,没有被static修饰的方法

  • 在实例方法中可以直接访问所属类的静态变量、静态方法、实例变量和实例方法。
public class StaticMethod {
    public static int count = 1;    // 定义静态变量count
    public int method1() {    
        // 实例方法method1
        count++;    // 访问静态变量count并赋值
        System.out.println("在静态方法 method1()中的 count="+count);    // 打印count
        return count;
    }
    public static int method2() {    
        // 静态方法method2
        count += count;    // 访问静态变量count并赋值
        System.out.println("在静态方法 method2()中的 count="+count);    // 打印count
        return count;
    }
    public static void PrintCount() {    
        // 静态方法PrintCount
        count += 2;
        System.out.println("在静态方法 PrintCount()中的 count="+count);    // 打印count
    }
    public static void main(String[] args) {
        StaticMethod sft = new StaticMethod();
        // 通过实例对象调用实例方法
        System.out.println("method1() 方法返回值 intro1="+sft.method1());
        // 直接调用静态方法
        System.out.println("method2() 方法返回值 intro1="+method2());
        // 通过类名调用静态方法,打印 count
        StaticMethod.PrintCount();
    }
}

二、方法重写

  • 当父类中的方法无法满足子类需求时需要方法重写
  • 方法重写又称为方法覆盖,在子类中创建一个与父类中的方法名称相同,返回值类型相同,形参列表相同,而方法体中的内容不同的方法即称为方法重写
    方法重写时要注意的点
  • 访问权限不能比父类的方法访问权限低
  • 声明为static和final的不能悲惨重写
  • 构造方法不能被重写
  • 子类和父类在同一个包中时,子类可以重写父类的所有方法,除了声明为 private 和 final 的方法。
  • 子类和父类不在同一个包中时,子类只能重写父类的声明为 public 和 protected 的非 final 方法。
  • 如果不能继承一个方法,则不能重写这个方法。
public class inherit {
    double A(int x,int y){
        return x+y;
    }
    double B(int m,int n){
        return m*n;
    }
}
class son extends inherit{
    double A(int x,int y){
        return x+2*y;
    }
}

test类

public class test {
    public static void main(String[] args) {
        son s=new son();
        System.out.println(s.A(1,2));

    }
}

三、方法重载

在同一个类中,方法名称相同而形参列表不同。形参列表不同是指形参列表的个数或顺序或类型不同,而参数名不同不能认为是方法重载

四、方法覆写(重写)与方法重载的区别

  1. 方法覆写存在于子类与父类之间,方法重载存在于类内部成员方法之间。
  2. 方法覆写指子类的方法与父类的方法在方法名、参数个数和参数类型等3个方面是完全一致的;而方法重载指方法同名,但参数个数或者参数类型不同。
  3. 方法覆写时子类中方法的访问权限不能小于父类的方法权限。
class A {
	public void show(int x) {}
	void display(double y) {}
}
class B extends A {	// 子类B继承父类A
	public void show(int x) {}  //覆写父类的show方法
	//重载父类中的display方法
	public void display(String msg) {}
}
 
public class Demo2 {
	public static void main(String[] args) {
		B b=new B();
		b.show(10);//调用子类的show方法
	}
}

五、方法的调用

  • 没有使用 static 修饰的成员变量和方法都必须使用对象来调用。