java复习笔记(2)
一、抽象类与抽象方法
抽象类用 abstract 关键字修饰,它不能被直接实例化(不能用 new 创建对象),核心作用是作为父类,让子类继承。抽象类里可以包含普通方法,也可以包含抽象方法——也就是只有方法声明、没有方法体的方法,比如定义一个 getArea() 方法,只声明返回值和方法名,不写具体实现。
抽象方法必须被非抽象的子类重写,子类继承抽象父类后,必须实现所有抽象方法,否则子类也得定义为抽象类。这就是“父类定规范,子类来实现”的典型体现,比如几何图形父类定义 getArea() 抽象方法,矩形、圆形子类分别实现自己的面积计算逻辑。
二、多态与数组应用
多态的核心体现是“父类引用指向子类对象”,比如 Geometry[] tuxing = new Geometry[9]; 这个数组,虽然类型是抽象父类 Geometry ,但数组里的每个元素都可以存储它的子类对象(比如 new Rect(16, 68) 、 new Circle(7) )。
我们可以通过父类数组统一管理不同子类对象,再通过循环调用重写后的 getArea() 方法,就能计算所有图形的面积总和。这种方式把不同子类的公共行为统一起来,不用为每个子类单独写一套计算逻辑,大幅提升了代码的复用性和扩展性。
三、接口与接口实现
接口用 interface 关键字定义,它是一种特殊的抽象类型,里面的方法默认是 public abstract 的(可以省略不写),变量默认是 public static final 的。接口的核心特点是:
- 一个类可以实现多个接口,弥补了 Java 单继承的局限;
- 实现类必须重写接口中所有的抽象方法,否则会编译报错。
比如定义 ComputerAverage 接口,声明 average() 方法,再让 SongGame 类和 School 类分别实现这个接口,用不同的逻辑计算平均值: SongGame 先排序去掉最高分最低分再求平均, School 直接对所有成绩求平均。通过接口多态,我们可以用 ComputerAverage 类型的引用,调用不同实现类的 average() 方法,得到不同的结果。
四、super 关键字与方法重写
super 关键字用来引用父类的内容,常见用法有三种:
- super.xxx :调用父类的成员变量;
- super.方法名() :调用父类的成员方法;
- super() :调用父类的构造方法,必须写在子类构造方法的第一行。
在方法重写中,子类可以通过 super 调用父类的方法,再在此基础上扩展逻辑。比如银行利息计算的例子,父类 Bank 定义了 computerInterest() 方法计算整年利息,子类 ConstructionBank 重写这个方法时,先通过 super.computerInterest() 获取整年利息,再额外计算零头天数的利息,最后把两部分加起来,既复用了父类的逻辑,又实现了子类的扩展需求。
五、继承与代码复用
继承是面向对象的核心特性之一,用 extends 关键字实现,子类可以继承父类的非私有成员变量和成员方法,避免重复代码。比如 ConstructionBank 和 BankOfDalian 都继承自 Bank 类,直接复用父类的 savedMoney 、 interestRate 变量和 setInterestRate() 方法,只需要重写自己的利息计算逻辑即可。
同时,Java 只支持单继承,一个类只能有一个直接父类,但可以通过实现多个接口来扩展功能,这也是接口的重要作用之一。
