java 抽象类的特点

抽象类
在多态中,父类的方法必须存在,因为多态的必要条件必须存在方法重写
方法的实现毫无意义
提供方向的声明即可,不需要实现,就是抽象方法

抽象类的特点:
  1 抽象方法和抽象类使用 abstract 修饰
  2 只要有抽象方法的类,必须是抽象类
  3 抽象类中不一定有抽象方法
  4 没有抽象方法的抽象类有意义,防止外界创建对象
防止外界实例的方式:
        a 构造方法私有
        b 抽象类
        c 接口
        d 内部类
  5 抽象类不能够实例化,得利用多态
  6 抽象类的子类特点:
        a 如果子类想要继承抽象类,就必须实现抽象类中的所有的抽象方法
        b 如果子类不想实现父类的抽象方法,那么子类必须升级为抽象类
  7 抽象类的子类特点:
        抽象类中:
        成员变量:给子类使用
        成员方法:给子类使用
        构造方法:帮助子类初始化父类继承下来的成员
        静态方法:直接通过类名访问,防止创建对象的不建议访问方式
        常量:可以,方便访问
        抽象类和普通类没有区别,只不过抽象类多了抽象方法
        抽象类的抽象方法强制子类重写
        非抽象方法直接给子类使用
        构造方法和成员变量直接给子类使用
 8 抽象类是服务类,成员一般使用public或者protected
 9 private修饰的方法不能被子类继承,更不能被重写,abstract修饰的方法强制子类重写
        final修饰的方法不能被子类继承,二者冲突

### 抽象类的特性与使用要点 Java中的抽象类是一种特殊的类,它不能被实例化,并且通常包含一个或多个没有具体实现的方法(即抽象方法)。以下是关于Java抽象类的一些关键特性和使用要点: - **定义方式**:一个类如果被`abstract`关键字修饰,则成为抽象类。例如: ```java public abstract class Shape { // 类体 } ``` - **抽象方法**:在抽象类中可以声明抽象方法,这些方法只有方法签名而没有方法体。子类需要提供这些方法的具体实现。 ```java abstract void calcArea(); ``` 注意,抽象方法不能是私有的(private),因为它们需要在子类中被重写[^3]。 - **非抽象方法和属性**:除了抽象方法之外,抽象类也可以拥有普通的成员变量和具有具体实现的方法。 ```java public double x; public double getX() { return x; } ``` - **继承要求**:如果一个具体的(非抽象)类继承了一个抽象类,那么这个子类必须实现其父类所有的抽象方法,除非该子类本身也是抽象类。 ```java public class Circle extends Shape { @Override void calcArea() { // 实现计算面积的逻辑 } } ``` - **不可实例化**:尝试直接实例化一个抽象类会导致编译错误。只有当有一个非抽象的子类时,才能创建对象。 ```java // 下面这行代码会引发编译错误 // A a = new A(); ``` - **构造函数**:尽管抽象类不能被实例化,但是它们仍然可以有构造函数,用于初始化抽象类中的字段或者为子类提供初始化逻辑。 ```java public abstract class Shape { public Shape() { // 初始化代码 } } ``` - **静态方法**:抽象类中的静态方法不能被声明为抽象方法,因为静态方法属于类而不是实例,这与抽象方法的设计初衷相悖。 - **应用场景**:抽象类常用于设计层次结构中的基类,定义一组子类共有的行为和属性,同时允许每个子类根据自己的需求来实现特定的行为。 通过合理地运用抽象类,可以在面向对象编程中更好地组织代码结构,提高代码复用性,并且能够强制规定子类的设计规范。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值