文章目录
- 一、方法的分类
- (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));
}
}
三、方法重载
在同一个类中,方法名称相同而形参列表不同。形参列表不同是指形参列表的个数或顺序或类型不同,而参数名不同不能认为是方法重载
四、方法覆写(重写)与方法重载的区别
- 方法覆写存在于子类与父类之间,方法重载存在于类内部成员方法之间。
- 方法覆写指子类的方法与父类的方法在方法名、参数个数和参数类型等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 修饰的成员变量和方法都必须使用对象来调用。