Java学习——抽象类

一、抽象类的定义语法

    抽象类指的是在普通类的结构里面增加抽象方法的组成部分(即有抽象方法的类一定是抽象类)。抽象方法没有方法体,同时还必须要使用abstract关键字定义,同时抽象类也必须要用abstract定义。

定义一个抽象类:

abstract class A{
	public fun(String s) {
		System.out.println("普通方法");
	}
	//抽象方法
	public abstract void print();
}

因为抽象方法没有方法体,故抽象方法是不能被执行的,所以抽象类也就不能被实例化。

故抽象类的使用原则:

  • 抽象类必须有子类。
  • 抽象类的子类必须要覆写抽象类中的所有抽象方法。

二、抽象类的使用限制

  • 由于抽象类里面存在一些属性,所以在抽象类中一定会存在构造方法,目的:文科属性初始化,并且子类对象实例化的时候依然满足先执行父类构造,再调用子类构造的情况。
  • 抽象类不能使用final定义,因为抽象类必须有子类,而final定义的类不能有子类。
  • 外部的抽象类不允许使用static声明,而内部的抽象类允许使用static声明,使用static声明的内部抽象类就相当于一个外部抽象类,继承的时候使用“外部类.内部类”的形式表示类名称。

示例:

package project;
abstract class A{	//外部抽象类
	static abstract class B{      内部抽象类
		public abstract void print();
	}
}
class C extends A.B{
	public void print() {
		System.out.println("*********");
	}
}
public class Main {

	public static void main(String[] args){
		A.B ab = new C();
		ab.print();
	}
}
  • 任何情况下,如果要执行类中的static方法,都可以在没有对象的时候直接调用,对于抽象类也是一样。

三、抽象类的实际应用

完成一个抽象行为类,其中包括吃、睡、工作三种行为,然后完成三个类Robot、Human和Pig,继承行为类,可以实现不同类对象所执行的不同行为。

代码:

package project;
abstract class Action{	//行为抽象类
	public static final int EAT = 1;
	public static final int SLEEP = 5;
	public static final int WORK = 7;
	public void command(int flag) {
		switch(flag) {
			case EAT:
				this.eat();
				break;
			case SLEEP:
				this.sleep();
				break;
			case WORK:
				this.work();
				break;
			case EAT + SLEEP:
				this.eat();
				this.sleep();
				break;
		}
	}
	public abstract void eat();
	public abstract void sleep();
	public abstract void work();
}
class Robot extends Action{    //机器人类

	@Override
	public void eat() {
		// TODO Auto-generated method stub
		System.out.println("机器人正在补充能量!");
	}

	@Override
	public void sleep() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void work() {
		// TODO Auto-generated method stub
		System.err.println("机器人正在努力工作!");
	}
	
}
class Human extends Action{    //人类类

	@Override
	public void eat() {
		// TODO Auto-generated method stub
		System.out.println("人类正在吃饭!");
	}

	@Override
	public void sleep() {
		// TODO Auto-generated method stub
		System.out.println("人类正在睡觉!");
	}

	@Override
	public void work() {
		// TODO Auto-generated method stub
		System.out.println("人类正在为了梦想努力工作!");
	}
	
}
class Pig extends Action{    //猪类

	@Override
	public void eat() {
		// TODO Auto-generated method stub
		System.out.println("猪正在啃食槽!");
	}

	@Override
	public void sleep() {
		// TODO Auto-generated method stub
		System.out.println("猪正在睡觉!");
	}

	@Override
	public void work() {
		// TODO Auto-generated method stub
		
	}
	
}
public class Main {

	public static void main(String[] args){
		fun(new Robot());
		fun(new Human());
		fun(new Pig());
	}
	public static void fun(Action act) {
		act.command(Action.EAT);
		act.command(Action.SLEEP);
		act.command(Action.WORK);
	}
}

运行截图:

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中,抽象类的子类是指继承了抽象类并且实现了抽象类中的所有抽象方法的类。根据引用,我们可以看到一个例子,其中定义了一个抽象类A,并在其中定义了一个内部抽象类B作为A的子类。B类实现了A中的抽象方法print()。根据引用,我们可以看到另一个例子,其中定义了一个抽象类A,它有一个普通方法fun()和一个抽象方法print()。抽象类的子类必须实现抽象方法print()。根据引用,抽象类的使用限制包括,抽象类必须有子类,抽象类的子类必须覆写所有抽象方法,抽象类不能使用final定义,外部抽象类不允许使用static声明。综上所述,Java抽象类的子类是指继承抽象类并且实现了所有抽象方法的类。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Java 抽象类——父类及子类特点与使用](https://blog.csdn.net/qq_41135605/article/details/108853845)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Java学习——抽象类](https://blog.csdn.net/qq_21385857/article/details/89703734)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值