java抽象类的继承

面向对象之抽象类继承

在定义类的前面加上关键字abstract,那么这个类就是抽象类了,抽象类本身无法产生实例对象,而且抽象类包含了一个以上的抽象方法,这些方法只是提供函数名称,并没有定义如何具体实现,由继承的派生类实现,派生类同时必须实现所有抽象类的方法,否则其本身将成为另外一个抽象类。(也就是说用abstract修饰的类,在继承它的时候需要实现它里边的所有抽象方法,否则继承者本身也会变成抽象类)

需要我们注意的一点是,当派生类重写抽象类的方法时,要使用override关键字来重写抽象类所定义的方法。

抽象类只能被继承,不能被实例化,抽象类的抽象方法是虚方法。


下面介绍什么是抽象类的抽象方法:

抽象方法:在类中没有方法体的方法,就是抽象方法。

抽象类:含有抽象方法的类就叫抽象类。

1.抽象类中的抽象方法必须被实现!

2.如果一个子类没有实现父类中的抽象方法,则子类也成为了一个抽象类!

3.抽象类中的普通方法,可以不必实现。


1 用abstract来修饰一个类时,这个类叫做抽象类;用abstract来修饰一个方法时,该方法叫做抽象方法。例如 :

abstract class Animal { //用abstract来定义一个Animal为抽象类
}
和
public abstract void enjoy(); //用abstract来定义一个抽象方法"enjoy"

2 含有抽象方法的类必须被声明为抽象类,抽象类必须被继承,抽象方法必须被重写。

3 抽象类不能被实例化。

4 抽象方法只需声明,而不需实现某些功能。如:

public abstract void enjoy();//这个抽象方法不需要实现功能

public void enjoy() {
System.out.print("叫声"); //而一般的方法有必要实现某些功能
}
### Java抽象类继承抽象类的用法和规则 #### 1. 抽象类继承抽象类的基本概念 在 Java 中,抽象类可以继承另一个抽象类。这种设计允许开发者构建更复杂的层次结构,从而更好地表达对象之间的关系。当一个抽象类继承另一个抽象类时,子类可以选择实现父类中的部分或全部抽象方法,也可以继续声明新的抽象方法。 #### 2. 继承规则 - 子类必须显式调用父类的构造器(如果有参数),通过 `super()` 实现[^4]。 - 如果父类中有未被实现的抽象方法,则子类要么实现这些方法,要么继续保持为抽象类[^3]。 - 子类可以重写父类中的具体方法,也可以新增自己的方法或属性[^1]。 #### 3. 示例代码 下面是一个关于抽象类继承抽象类的具体示例: ```java // 定义第一个抽象类 BaseShape abstract class BaseShape { String color; // 构造函数 public BaseShape(String color) { this.color = color; } // 抽象方法 calculatePerimeter() abstract double calculatePerimeter(); // 普通方法 displayColor() public void displayColor() { System.out.println("颜色是:" + color); } } // 定义第二个抽象类 Rectangle,继承自 BaseShape abstract class Rectangle extends BaseShape { int width, height; // 调用父类构造函数并初始化宽度和高度 public Rectangle(String color, int width, int height) { super(color); // 显式调用父类构造器 this.width = width; this.height = height; } @Override double calculatePerimeter() { return 2 * (width + height); } // 新增抽象方法 calculateDiagonalLength() abstract double calculateDiagonalLength(); } // 具体实现类 Square,继承自 Rectangle class Square extends Rectangle { public Square(String color, int side) { super(color, side, side); // 使用父类构造器设置边长 } @Override double calculateDiagonalLength() { return Math.sqrt(2) * width; // 计算正方形对角线长度 } } ``` 在这个例子中: - `BaseShape` 是顶层抽象类,提供了通用的颜色属性以及周长计算的抽象方法。 - `Rectangle` 继承了 `BaseShape` 并实现了其抽象方法 `calculatePerimeter()`,同时还增加了新的抽象方法 `calculateDiagonalLength()`。 - `Square` 是具体的实现类,继承了 `Rectangle` 并完成了所有剩余的抽象方法。 #### 4. 关键点总结 - **构造器调用**:子类必须显式调用父类的带参构造器,使用 `super()` 方法完成初始化。 - **抽象方法实现**:如果子类不是抽象类,则需要实现所有的抽象方法;否则它可以保留某些方法不实现,并标记自己为抽象类[^3]。 - **多态支持**:通过抽象类的设计,程序能够利用多态特性,在运行时动态绑定不同的实现类实例。 --- 相关问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值