一、继承
继承是面向对象编程中的一种机制,它允许一个类(子类)继承另一个类(父类)的属性和方法。通过继承,子类可以复用父类的代码,同时还可以扩展或修改父类的行为。
特性:
1、子类的构造函数在执行时,首先会调用父类的构造函数。因此,确保父类的构造函数完成后再初始化子类的特有属性。
2、protected
修饰符允许子类访问父类的成员,但不能被其他类访问。private
修饰符完全隐藏成员,不允许子类直接访问。选择合适的访问权限可以增强封装性和灵活性。
例子:
// 父类(基类)
class Animal {
// 父类的属性
String name;
// 父类的方法
void eat() {
System.out.println(name + "正在吃饭。");
}
}
// 子类(派生类)
class Dog extends Animal {
// 子类特有的方法
void bark() {
System.out.println(name + "正在汪汪叫。");
}
}
// 测试继承
public class Main {
public static void main(String[] args) {
// 创建一个 Dog 对象
Dog myDog = new Dog();
// 设置属性
myDog.name = "小黑";
// 调用父类的方法
myDog.eat();
// 调用子类的方法
myDog.bark();
}
}
二、多态
多态是指一个接口或方法可以表现为多种不同的行为。在 Java 中,多态通常有两种表现形式:
1、方法重载:在同一个类中定义多个方法名相同但参数不同的方法。
2、方法重写:在子类中重写父类的方法,以实现子类特有的行为。
特性:
1、在子类中重写父类的方法时,确保方法名、参数列表和返回类型与父类方法一致。否则,子类中的方法不会真正重写父类的方法,而是创建了一个新的方法。
2、在重写方法时,使用 @Override
注解可以帮助编译器检查方法是否正确重写。如果方法签名不匹配,编译器会报错。
例子:
// 父类
class Animal {
// 重写此方法的子类会表现出不同的行为
void makeSound() {
System.out.println("动物发出声音。");
}
}
// 子类
class Dog extends Animal {
// 重写父类的 makeSound 方法
@Override
void makeSound() {
System.out.println("小狗汪汪。");
}
}
// 另一个子类
class Cat extends Animal {
// 重写父类的 makeSound 方法
@Override
void makeSound() {
System.out.println("小猫喵喵。");
}
}
// 测试多态
public class Main {
public static void main(String[] args) {
// 创建父类类型的引用,但指向子类对象
Animal myAnimal;
myAnimal = new Dog();
myAnimal.makeSound(); // 输出 "小狗汪汪。"
myAnimal = new Cat();
myAnimal.makeSound(); // 输出 "小猫喵喵。"
}
}