Java类和对象实例(五):多态
多态是面向对象编程的四大特性之一,它允许我们使用父类类型的引用指向子类对象,并可以在运行时确定调用哪个子类的方法。这通常通过方法重写(Override)和方法重载(Overload)来实现。
方法重写(Override)
当子类有一个与父类完全相同的方法(方法名、参数列表和返回类型都相同)时,我们说子类重写了父类的方法。在运行时,如果通过父类引用调用这个方法,将执行子类中的实现。
java复制代码
|
// 父类 |
|
public class Animal { |
|
void makeSound() { |
|
System.out.println("The animal makes a sound."); |
|
} |
|
} |
|
|
|
// 子类 |
|
public class Dog extends Animal { |
|
// 重写父类方法 |
|
@Override |
|
void makeSound() { |
|
System.out.println("The dog barks."); |
|
} |
|
} |
|
|
|
// 另一个子类 |
|
public class Cat extends Animal { |
|
// 重写父类方法 |
|
@Override |
|
void makeSound() { |
|
System.out.println("The cat meows."); |
|
} |
|
} |
使用多态
java复制代码
|
public class Main { |
|
public static void main(String[] args) { |
|
Animal animal1 = new Dog(); // Dog对象赋值给Animal引用 |
|
Animal animal2 = new Cat(); // Cat对象赋值给Animal引用 |
|
|
|
// 调用makeSound方法,实际执行的是子类中的实现 |
|
animal1.makeSound(); // 输出 "The dog barks." |
|
animal2.makeSound(); // 输出 "The cat meows." |
|
} |
|
} |
方法重载(Overload)
方法重载是指在同一个类中可以有多个方法拥有相同的名字,但参数列表(参数数量、类型或顺序)必须不同。
java复制代码
|
public class Calculator { |
|
// 重载的加法方法,接受两个整数参数 |
|
int add(int a, int b) { |
|
return a + b; |
|
} |
|
|
|
// 重载的加法方法,接受两个浮点数参数 |
|
double add(double a, double b) { |
|
return a + b; |
|
} |
|
} |
使用重载
java复制代码
|
public class Main { |
|
public static void main(String[] args) { |
|
Calculator calculator = new Calculator(); |
|
|
|
// 调用不同的add方法,根据参数类型决定 |
|
int sumInts = calculator.add(5, 10); // 使用整数参数的add方法 |
|
double sumDoubles = calculator.add(5.5, 10.5); // 使用浮点数参数的add方法 |
|
|
|
System.out.println("Sum of integers: " + sumInts); |
|
System.out.println("Sum of doubles: " + sumDoubles); |
|
} |
|
} |
Java类和对象实例(六):封装、抽象和接口
封装(Encapsulation)
封装是指将对象的属性(变量)和方法(函数)隐藏在一个类内部,并通过公共的getter和setter方法来访问和修改这些属性。这有助于保护对象的内部状态,防止外部代码直接访问和修改对象的属性。
抽象(Abstraction)
抽象是指只显示对象的必要信息,而隐藏不必要的细节。在Java中,可以使用抽象类(abstract class)和抽象方法(abstract method)来实现抽象。抽象类不能被实例化,通常包含一个或多个抽象方法,这些方法在抽象类中没有具体实现,必须由子类提供具体实现。
接口(Interface)
接口是一种定义方法但不包含实现的抽象类型。它允许我们定义一组方法,然后由不同的类来实现这些方法。接口可以被类实现(implements),一个类可以实现多个接口。接口是Java中实现多态的一种方式。
定义抽象类和接口
java复制代码
|
// 抽象类 |
|
public abstract class Animal { |
|
abstract void makeSound(); // 抽象方法 |
|
} |
|
|
|
// 接口 |
|
public interface Speakable { |
|
void speak(); // 接口方法 |
|
} |
|
|
|
// 实现抽象类和接口的类 |
|
public class Dog extends Animal implements Speakable { |
|
@Override |
|
void makeSound() { |
|
System.out.println("The dog barks."); |
|
} |
|
|
|
@Override |
|
public void speak() { |
|
System.out.println("The dog says, 'Woof!'"); |
|
} |
|
} |
使用抽象类和接口
java复制代码
|
public class Main { |
|
public static void main(String[] args) { |
|
Animal animal = new Dog(); // Dog对象赋值给Animal引用 |
|
Speakable speakable = new |