Java抽象类

本文介绍了Java中的抽象类,包括其定义、特点、抽象方法的定义,以及抽象类在实际编程中的作用。抽象类是一种不能被实例化的类,常用于作为子类的模板,提供通用方法,而具体实现由子类完成。例如,InputStream和Reader是常见的抽象类,它们在IO操作中扮演重要角色。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、抽象类:我们编写一个类,主要是用来描绘对象,方法也都有具体的方法体,但也并不是所有类都是用来描绘对象的,抽象类描述的就是一个类中没有足够的信息来描绘一个具体的对象,是用abstract关键词修饰的类。

二、抽象类的特点

  1. 抽象类必须是abstract修饰的类;
  2. 抽象类和一般的类是没有什么区别的,都是描述事物,只不过抽象类在描述事物时, 有些功能不具体。所以抽象类里面可以包括一般类里面的所有的功能,可以有成员变量、方法 (普通方法和抽象方法都可以)、构造器、初始化块、内部类(接口、枚举);
public abstract class Abstract {
	//成员变量
	private int age=10;
	//类变量
     static int weight;
	//初始化块
    {
     	System.out.println("初始化块");
    }
    //静态初始化块
    static{ 
    	System.out.println("静态初始化块"); 
    }
    //构造器
    public Abstract(){ 
    
    }
    //构造器的重载
    public Abstract(int big){
    
    }
    //定义一个普通方法
    public void sleep(){ 
    	System.out.println("休息");
    }
}

  1. 抽象类不可以被实例化,无法使用new关键字来调用抽象类的构造器创建抽象类的实例,但是可以声明变量;由于抽象类的构造器不能用于创建实例,因此它主要是用于被其子类调用,被子类继承后,再对抽象类中所有的抽象方法进行实现(重写);
//子类继承抽象类,必须实现抽象类的所有抽象方法
public class Rabbit extends Abstract{
     @Override  //标识符:代表重写父类的方法,或者实现一个抽象方法
     public void swimming() { 
     		System.out.println("我不会游泳"); 
     }
     @Override
     public String say(String str) { 
     		return str; 
     }
}
  1. 抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类。
  2. abstract static不能同时修饰一个方法(不能同时存在),也不能和final,private共存,因为一个方法用abstract修饰后,它已经是抽象方法了,并不会存在什么抽象静态方法,其余两个也是如此;
  3. 抽象类可以继承一个类或实现多个接口
//实现一个类
class fish{ }
public abstract class Animal extends fish{

}

//实现多个接口
interface interfaceOne{ //接口1 }
interface interfaceTwo{ //接口  }
public abstract class Animal1 implements interfaceOne,interfaceTwo{

}

三、抽象类的体现:抽象类可以只定义需要使用的某些方法,其余留给子类去实现,抽象类作为多个子类的通用模板,它提供的只是一个通用的方法,具体要怎么实现,要看它的子类,子类在抽象类的基础上进行拓展,对抽象类的方法进行实现,但子类不能改变抽象类的方法。

四、抽象方法的定义:用abstract关键词修饰,没有方法体。
格式:[修饰符] abstract 返回类型 方法名();
修饰符 (public protected )二选一

//抽象方法只包含一个方法名,而没有方法体,使用abstract修饰
public abstract void swimming();
public abstract String say(String str);

抽象方法目的是为了不让该类创建对象。

五、说明:我们在分析一个事物时,可以调用一些共性内容,调用的是方法体;而特殊情况中,我们只需调用它的方法,不需要它的方法体,这个时候我们就可以声明一个抽象的方法,因为我们并不知道这个方法该如何去实现。用一句话概括就是:抽象abstract修饰的方法是不具体的。相当于某个父类只是知道子类包括哪些抽象方法,但是不知道如何实现这些方法,不知道具体是怎么实现的。

六、常见的几个抽象类
字节流:InputStream(输入流),OutputStream(输出流)
字符流:Reader(输入流),Writer(输出流)
它们都是抽象的,不能直接被实例化,之后在总结IO知识时会详细了解到。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值