目录
面向对象重点
方法重载
方法重载(Overload
)指方法名相同,形参列表不同的方法。Java 通过参数类型来判断该方法是否为重载方法。修饰符不同或返回值类型不同的方法不能称为方法重载!
例如:
public void show() {
System.out.println("哦吼?");
}
public void show(String name) {
System.out.println("商品名:"+ name);
}
public void show(String name, double price) {
System.out.println("商品名:" + name + ", 价格:" + price);
}
public static void main(String[] args) {
show(); // 哦吼?
show("手机"); // 商品名:手机
show("平板", 3000); // 商品名:平板, 价格:3000
}
构造器重载
构造器重载要求形参列表不同。
例如:
class Dog{
private String name;
private int age;
public Dog(){
// 无参构造
}
public Dog(String name){
this.name = name;
}
public Dog(String name, int age){
this.name = name;
this.age = age;
}
}
这里有个问题,就是当需要为某个成员统一修改时,可能需要一一修改构造器。例如,需要在name
成员前添加Dog:
的前缀,需要一一修改构造器。
这里可以通过this(参数)
来调用对应的构造方法。
class Dog{
private String name;
private int age;
public Dog(){
// 无参构造
}
public Dog(String name){
this.name = "Dog: " + name;
}
public Dog(String name, int age){
this(name); // 调用 `public Dog(String)` 构造器
this.age = age;
}
}
方法重写
方法重写(Override
)是指子类将父类的方法重写。方法重写要求方法名、形参列表相同,返回值类型、声明抛出的异常相同或更小(即子类),访问权限相同或更大。
重写的方法通常使用@Override
注解来修饰(避免重写错代码)。
例如:
class Bird {
public void fly() {
System.out.println("鸟飞咯");
}
}
class Ostrich extends Bird {
@Override
public void fly() {
System.out.println("鸵鸟不会飞……");
}
}
toString 与 equals 方法
toString
方法是将当前对象以文本的方式来表示出来,Java 默认的toString
方法是类名@哈希码
的格式,通常我们重写该方法将其内部的成员变量表示出来。
equals
方法则是用于比较两个对象是否相同,Java 默认通过比较两个引用变量是否指向同一个对象,通常我们重写该方法使用该类的关键属性来比较。
class Person {
private String name;
private int age;
// 有参构造
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// Getter / Setter 方法
public void setName(String