【Java面向对象】java学习之旅16-抽象类

本文通过一个枪械类的实例,详细介绍了Java中抽象类的定义、使用及注意事项。抽象类用abstract修饰,可以包含抽象方法(只有声明没有实现)。子类继承抽象类必须重写所有抽象方法,否则子类也会成为抽象类。在主方法中展示了如何通过匿名内部类创建抽象类的实例以及通过子类实现抽象方法。

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

定义:

抽象的类,对于一系列具有共同特征和行为的子类的进一步抽象。

使用:

  1. 使用abstract修饰类名
  2. 抽象类中可以有属性、普通方法和抽象方法
  3. 抽象方法:只有声明没有实现,使用abstract关键字修饰
  4. 子类继承抽象父类,通过重写实现父类的所有抽象方法,否则该子类也是抽象类

注意事项:

  1. 抽象类不可以直接创建对象,可以通过类的内部实现创建对象。
  2. 抽象类可以有抽象方法,也可以有普通方法。
  3. 有抽象方法的类一定是抽象类。
  4. 子类没有重写实现所有抽象父类的抽象方法,子类也必须是抽象类。
  5. 构造方法和静态方法不能是抽象的。
  6. 抽象类不能被final修饰
  7. 抽象方法不能被final、private修饰
  8. 抽象类的构造方法不能直接使用,可以在子类的构造方法中调用

下面用枪械类来说明抽象类

/**
 * 	枪械抽象类
 * 
 */
public abstract class Gun {
	
	private String name;
	private double range;
	private double caliber;
	
	public Gun() {
		super();
	}
	public Gun(String name, double range, double caliber) {
		super();
		this.name = name;
		this.range = range;
		this.caliber = caliber;
	}

	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public double getRange() {
		return range;
	}
	public void setRange(double range) {
		this.range = range;
	}
	public double getCaliber() {
		return caliber;
	}
	public void setCaliber(double caliber) {
		this.caliber = caliber;
	}
	
	//抽象方法
	public abstract void shoot();
	
	@Override
	public String toString() {
		return "Gun [name=" + name + ", range=" + range + ", caliber=" + caliber + "]";
	}
	
}

建立一个突击步枪子类

/**
 * 	步枪子类
 */
public class Musket extends Gun {

	public Musket() {
		super();
	}

	public Musket(String name, double range, double caliber) {
		super(name, range, caliber);
	}

	@Override
	//如果本类不是抽象类,必须重写抽象父类的抽象方法
	public void shoot() {
		System.out.println("突突突");
	}

}

在主方法中

public static void main(String[] args) {
		
		//抽象类的内部实现
		//可以理解为java不允许抽象类创建对象,但是如果实现了抽象的方法可以允许创建实例对象
		Gun gun1 = new Gun("黄金左轮", 100.5, 5.8) {
			@Override
			public void shoot() {
				System.out.println("点射");
			}
		};
		System.out.println(gun1.toString());
		gun1.shoot();
		
		//通过子类实现抽象父类,创建对象
		Musket gun2 = new Musket("ak47", 400, 7.62);
		System.out.println(gun2.toString());
		gun2.shoot();
		
	}

总结:

用abstract去定义一个抽象类,定义抽象方法是必须要加abstract,没有默认一说也是防止创建父类对象所以用抽象去定义

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JeffHan^_^

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值