抽象概念
一些概念
abstract class Animal {
// 具体实现的方法
public void eat() {
System.out.println("The animal is eating.");
}
// 抽象方法
public abstract void makeSound();
}
class Dog extends Animal {
// 提供抽象方法的具体实现
@Override
public void makeSound() {
System.out.println("The dog barks.");
}
}
class Cat extends Animal {
// 提供抽象方法的具体实现
@Override
public void makeSound() {
System.out.println("The cat meows.");
}
}
public class Main {
public static void main(String[] args) {
// 实例化Dog对象
Animal myDog = new Dog();
myDog.eat(); // 输出:The animal is eating.
myDog.makeSound(); // 输出:The dog barks.
System.out.println(); // 打印空行以分隔输出
// 实例化Cat对象
Animal myCat = new Cat();
myCat.eat(); // 输出:The animal is eating.
myCat.makeSound(); // 输出:The cat meows.
}
}
- public的使用(参考博文-.java 文件只能有一个 public 类且该类的名称必须与文件名相匹配)
- 在Java中,每个源文件(.java文件)只能有一个公共(public)类,且该类的名称必须与文件名相匹配。 这意味着只能有一个类被声明为public,而其他类则不能被声明为public。
- 非公共类可以存在于同一个源文件中,并且可以有多个非公共类。这些非公共类在同一个文件中可以被其他类使用,但不能再从其他文件中访问。
- 内部类的访问修饰符可以是public、protected、private或默认访问(即不使用任何访问修饰符),且不限数量(可以声明多个公共内部类)。如果内部类声明为public,则可以从其他文件中访问;如果内部类声明为protected、private或默认访问,则只能在同一文件中访问。
- 抽象类(参考博文-Java中的抽象类和接口)
- 有抽象方法
- 不能实例化,用于继承
- 继承
- 基于一个现有的类创建一个新的类,这个过程称为派生。新创建的类被称为子类(或派生类),而提供基础的类被称为父类(或基类、超类)。继承使得子类能够继承父类的特性和行为,这样可以减少代码的重复,提高代码的可维护性和可扩展性。
- 子类获取了父类中声明的所有的属性和方法,并且可以声明自己的属性和方法,实现功能的拓展。
- 重写
重写(Overriding) 是多态性的一种表现,它指的是在子类中提供一个与父类中具有相同名称、相同参数列表(父类抽象方法可省略)和相同返回类型的方法的具体实现。 - 多态(同一行为的不同表现形式)
在 main 方法中,我们实例化了 Dog 和 Cat 对象,并将它们赋给 Animal 类型的引用。当我们调用 makeSound 方法时,Java虚拟机会根据对象的实际类型来决定调用哪个类的方法。这就是多态性的体现:同一个方法调用(在这里是 makeSound)在不同的对象上执行不同的代码。 - 要求:
- 继承
- 重写
- 父类指向子类对象
Animal myDog = new Dog();