什么是抽象类?

抽象类

什么是抽象类:

由abstract修饰的方法叫抽象方法;由abstract修饰的类叫抽象类。抽象的类无法进行实例化,因为他不是具体存在的类,或者说这样的类还不够完善,不能直接使用new关键字调用其构造器生成该类的对象。我们可以使用abstract定义一个抽象类和抽象方法,示例代码如下:

abstract class test{
    abstract int xx(int x, int y);
}

抽象的方法没有方法体。需要注意的是在抽象类中**既可以有抽象方法,也可以有普通方法,**注意抽象方法是没有方法体的(也就是方法后面是没有大括号的)。凡是继承这个抽象类的实体子类,都必须要实现这个抽象方法。(也就是重写该方法)

我们总结一下抽象类的特点:

(1)抽象类不能被实例化

(2)构造方法 和 static 方法不能是抽象的

(3)父类的抽象方法往往在子类中实现

(4)抽象类可以具有指向子类对象的对象引用

小结:

​ 当父类的某些方法,需要声明,但是又不确定如何实现时,可以将其声明为抽象方法, 那个这个类就是抽象类

所谓抽象方法 就是没有实现的方法;所谓没有实现 就是指 没有方法体

当一个类中存在抽象方法时,需要将该类声明为abstract类

一般来说,抽象类会被继承,由其子类来实现抽象方法(重写方法,从而实现)

  1. 用abstract关键字来修饰一个类时,这个类就叫抽象类

​ 访问修饰符 abstract 类名{

}

  1. 用 abstract 关键字来修饰一个方法时,这个方法就是抽象方法

    ​ 访问修饰符 abstract 返回类型 方法名(参数列表); // 没有方法体

  2. 抽象类的价值更多作用是在于设计,是设计者设计好后,让子类继承并实现抽象类()

  3. 抽象类可以有任意成员(抽象类还是类),比如:非抽象方法、构造器、静态属性等等

  4. 如果一个类继承了抽象类,则它必须实现抽象类的所有抽象方法,除非它自己也声明为 abstract 类

  5. 抽象方法不能使用private、final和static来修饰,因为这些关键字都是和重写相违背的

// 如果一个类继承了抽象类,则它必须实现抽象类的所有抽象方法,除非它自己也声明为 abstract 类
abstract class A{
    public abstract void Hi();
}

// class B extends A{} //会报错
abstract class B extends A{  // ok
    
}

class C extends A{
    @Override   //重写
    public void Hi(){ //这里相当于C类实现了父类A的抽象方法。 所谓实现方法 就是有方法体
        
    }
}
### Java 抽象类的概念、定义、特点及用途 #### 概念 抽象类Java中的一种特殊类,它不能被实例化,只能作为其他类的父类使用。抽象类可以包含抽象方法(没有具体实现的方法)和具体方法(有具体实现的方法)。抽象方法必须由子类通过`@Override`关键字进行实现[^1]。 #### 定义 抽象类使用`abstract`关键字修饰。以下是抽象类的基本语法结构: ```java abstract class 类名 { // 抽象方法 public abstract 返回类型 方法名(参数列表); // 具体方法 public 返回类型 方法名(参数列表) { // 方法体 } } ``` 例如: ```java abstract class Animal { // 抽象方法 public abstract void sound(); // 具体方法 public void sleep() { System.out.println("Animal is sleeping..."); } } ``` #### 特点 1. 抽象类不能直接实例化,即无法通过`new`关键字创建抽象类的对象[^2]。 2. 抽象类中可以包含抽象方法和具体方法。抽象方法没有方法体,而具体方法具有完整的实现逻辑[^1]。 3. 如果一个类包含抽象方法,则该类必须声明为抽象类,否则会导致编译错误[^2]。 4. 子类继承抽象类时,必须实现所有未实现的抽象方法,除非子类本身也是抽象类。 #### 用途 1. **代码复用**:抽象类可以包含具体方法,这些方法可以在子类中直接使用,从而减少重复代码的编写[^2]。 2. **定义统一接口**:抽象类可以通过抽象方法定义一组规范,要求所有子类遵循这些规范并提供具体的实现[^1]。 3. **隐藏实现细节**:抽象类允许开发者将部分实现细节隐藏在具体方法中,同时将需要自定义的部分留给子类实现[^2]。 4. **支持多态性**:通过抽象类的引用指向不同的子类对象,可以实现多态行为[^1]。 ```java // 示例:抽象类的多态性 public class Main { public static void main(String[] args) { Animal dog = new Dog(); // 多态 dog.sound(); // 调用子类实现的方法 dog.sleep(); // 调用抽象类中的具体方法 } } class Dog extends Animal { @Override public void sound() { System.out.println("Dog barks..."); } } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值