面向对象三大特征之继承、多态
一、继承
继承(Inheritance):继承是一种实现了代码重用的机制,它允许一个类(子类)继承另一个类(父类)的属性和方法。子类可以通过继承获得父类的属性和方法,并且可以对这些属性和方法进行扩展、重写或隐藏,从而实现代码的灵活性和扩展性。
1.基础用法
class 父类{
... //成员变量、成员方法
}
class 子类 extends 父类{
... //类体
}
2.重写父类中的方法
class Animal {
public void makeSound() {
System.out.println("Animal is making a sound.");
}
}
class Dog extends Animal {
//重写父类中的方法
@Override
public void makeSound() {
System.out.println("Dog is barking.");
}
}
public class Main {
public static void main(String[] args) {
Animal dog = new Dog();
dog.makeSound(); // 输出: Dog is barking.
}
}
3.super关键字
super关键字引用父类对象
super关键字可以调用父类中的方法和属性
class Animal {
public void makeSound() {
System.out.println("Animal is making a sound.");
}
}
class Dog extends Animal {
//重写父类中的方法
@Override
public void makeSound() {
//使用super关键字调用父类中的方法
super.makeSound();
System.out.println("Dog is barking.");
}
}
public class Main {
public static void main(String[] args) {
Animal dog = new Dog();
dog.makeSound(); // 输出:Animal is making a sound. Dog is barking.
}
}
二、多态
多态(Polymorphism):多态是指同一种行为具有多种不同表现形式的能力。在Java中,多态具体包括编译时多态(静态多态)和运行时多态(动态多态)。编译时多态是指方法的重载(overloading)和方法的重写(overriding),而运行时多态是指通过继承和接口实现的动态绑定。多态性使得我们可以根据不同的对象类型,以统一的接口来访问对象的行为,从而提高代码的灵活性和可扩展性。
1.多态的实现
// 定义抽象类对象和抽象类方法
abstract class Animal {
public abstract void makeSound();
}
class Dog extends Animal {
// 父类方法被子类重写
@Override
public void makeSound() {
System.out.println("Dog: Woof!");
}
}
class Cat extends Animal {
// 父类方法被子类重写
@Override
public void makeSound() {
System.out.println("Cat: Meow!");
}
}
public class Main {
public static void main(String[] args) {
Animal animal1 = new Dog();
animal1.makeSound(); // 输出:Dog: Woof!
Animal animal2 = new Cat();
animal2.makeSound(); // 输出:Cat: Meow!
}
}
2.1上转型对象
上转型是指将一个子类的实例赋给一个父类类型的引用变量,此时父类类型的引用变量可以引用子类的实例。
这种转型操作不需要显式进行类型转换,而是在编译时期进行检查,因为子类对象本身具有父类的属性和方法,所以可以使用父类类型的引用变量来引用子类对象。
// 定义抽象类对象和抽象类方法
abstract class Animal {
public abstract void makeSound();
}
class Dog extends Animal {
// 父类方法被子类重写
@Override
public void makeSound() {
System.out.println("Dog: Woof!");
}
}
public class Main {
public static void main(String[] args) {
// 建立上转型对象
Animal animal = new Dog();
animal1.makeSound(); // 输出:Dog: Woof!
}
}
三、多态与继承的区别
关系:
继承:继承描述了父类和子类之间的关系,父类是子类的基类(或超类),子类继承了父类的属性和方法。
多态:多态描述了具有不同类型的对象对同一消息做出响应的能力。
实现方式:
继承:通过使用关键字extends,子类可以继承父类的属性和方法。
多态:通过使用父类的引用变量来引用子类的对象,实现多态。
作用:
继承:继承可以实现代码的重用,避免重复编写相似的代码,同时可以定义和组织类的层次结构。
多态:多态能够增加代码的灵活性和可扩展性,通过父类类型的引用变量调用子类对象的方法,可以实现动态绑定,根据实际引用的对象类型来调用相应的方法。