构造方法+方法重载重写
构造方法
java可以向C#一样,通过无参或带参数的构造方法(Constructor)完成赋值的初始化
在Penguin类中增加一个无参的构造方法Penguin(),如下
/**
* 宠物企鹅类,测试无参构造方法
*/
public class Penguin{
String name = "无名氏"; //昵称
int health = 100; //健康值
int love = 0; //亲密度
String sex = "Q仔"; //性别
/**
* 无参构造方法
*/
public Penguin(){
name = "楠楠";
love = 20;
sex = "Q妹";
System.out.println("执行构造方法");
}
/**
* 输出企鹅的信息
*/
public void print(){
System.out.println("宠物的自白:\n我的名字叫" + this.name
+ ",健康值是" + this.health + ",和主人的亲密度是"
+ this.love + ",性别是" + this.sex + "。");
}
/**
* 测试无参构造方法的使用
*/
public static void main(String[] args){
Penguin pgn = null;
pgn = new Penguin();
pgn.print();
}
}
Penguin()方法就是Penguin类的构造方法,构造方法是一个特殊的方法,当没有Penguin()方法时,系统会提供一个空的Penguin()方法。
构造方法的名称和类名相同,没有返回值类型,构造方法的主要作用就是在创建对象时执行一些初始化操作,比如给成员属性赋初始值。
方法重载
如何定义重载。方法的重写和重载只有一个字不同,很多初学者认为这两者十分相似,其实不然。方法重载是让类以统一的方式处理不同类型数据的一种手段。调用方法时通过传递给它们的不同个数和类型的参数来决定具体使用哪个方法,这就是多态性。
所谓方法重载是指在一个类中,多个方法的方法名相同,但是参数列表不同。参数列表不同指的是参数个数、参数类型或者参数的顺序不同。方法的重载在实际应用中也会经常用到。不仅是一般的方法,构造方法也可以重载。
重写规则
- 必须在同一个类里
- 方法名相同
- 参数列表(方法参数的个数或参数类型)不同
- 与方法返回值和方法修饰符没有任何关系
在使用this调用自身的其他构造方法时,只能作为第一条语句
方法重写
如何定义重写:在Java程序中,类的继承关系可以产生一个子类,子类继承父类,它具备了父类所有的特征,继承了父类所有的方法和变量。子类可以定义新的特征,当子类需要修改父类的一些方法进行扩展,增大功能,程序设计者常常把这样的一种操作方法称为重写,也叫称为覆写或覆盖。重写体现了Java优越
性,重写是建立在继承关系上,它使语言结构更加丰富。在Java中的继承中,子类既可以隐藏和访问父类的方法,也可以覆盖继承父类的方法。在Java中覆盖继承父类的方法就是通过方法的重写来实现的。
所谓方法的重写是指子类中的方法与父类中继承的方法有完全相同的返回值类型、方法名、参数个数以及参数类型。这样,就可以实现对父类方法的覆盖。
在重写方法时,需要遵循以下的规则:
1.父类方法的参数列表必须完全与被子类重写的方法的参数列表相同,否则不能称其为重写而是重载。
2.父类的返回类型必须与被子类重写的方法返回类型相同,否则不能称其为重写而是重载。
3.Java中规定,被子类重写的方法不能拥有比父类方法更加严格的访问权限。
方法重写与方法重载的区别
区别点 | 重载 | 重写 |
---|---|---|
英文 | Overloading | Overiding |
定义 | 方法名称相同,参数的类型或个数不同 | 方法名称、参数类型、返回值类型全部相同 |
方法名称相同,参数的类型或个数不同 | 被重写的方法不能拥有更严格的权限 | |
范围 | 发生在一个类中 | 发生在继承类中 |
结束语
在面向对象程序设计的思想中,类的继承和多态性主要就是体现在子类重写父类的方法。而构造方法的重载作为方法重载的一个典型特例,可以通过重载构造方法来表达对象的多种初始化行为。灵活的运用方法重写与方法重载,不仅能减少编码的工作量,也能大大提高程序的可维护性及可扩展性。用好重写和重载
可以设计一个结构清晰而简洁的类,可以说重写和重载在编写代码过程中的作用非同一般。