Abstract Class (抽象类)

本文深入探讨了Java中的抽象类,包括其定义、特点、使用场景以及在后端开发中的重要作用。通过学习,读者将能更好地理解如何在设计模式和面试中运用抽象类。

1

package cm.abstracts.define;

/**
 	在本程序的类中定义了一个抽象方法print(),既然类中有抽象方法,那么类就必须定义为抽象类,所以使用了
“abstract class”来定义该类。

          但是一定要记住:抽象类只是比普通类多了抽象方法的定义,即关键字abstract,其他结构与普通类完全一样。
 */

//这个类用来测试抽象类的定义
public class ModelFthirtySix {
	static String name;
	public static void main(String[] args) {
		String sex = null;
		System.out.println(sex);
		System.out.println(name);
	}
}


/**	从熟练度来说,看来还是要加强度对static的学习与巩固	*/

//定义抽象类,创建抽象类,声明抽象类关键字:abstract
//定义一个抽象类,使用abstract声明
abstract class Abstract{
	//创建抽象方法,声明抽象方法关键字:abstract,抽象类中的抽象方法没有方法体  “ {} ”
	//此方法并没有方法体的声明,并且存在abstract关键字,表示抽象方法
	public abstract void aBstract();
	
	//创建一个普通方法
	public void fun() {
		System.out.println("存在有方法体的方法!");
	}
}

2

package cm.abstracts.define;

//这个类用来测试:抽象类不能直接实例化对象
/**
 * 按照传统的思路,既然已经实例化好了抽象类,那么就应该通过实例化对象来操作,但是抽象类是不能直接进行对象实例化操作的。
即抽象类,是无法实例化的。
 */
public class ExampleFthirtySeven {
	public static void main(String[] args) {
		//错误的实例化抽象类对象
		//报错:Cannot instantiate the type Abstracts不能实例化Abstracts类
//		Abstracts a = new Abstracts();
		
		/**本程序的代码在编译时会出现错误,也就是说抽象类不能进行直接的对象实例化操作。不能实例化的原因是什么呢?
		        
		        当一个类的对象实例化后,就意味着这个对象可以调用类的属性或方法,但是在抽象类里面存在抽象方法,抽象方法
	           是没有方法体的。也就是,抽象方法没有方法体,无法被调用,进而无法实例化该类对象。但这并不是意味着,抽象类无
	           法使用,只不过必须遵守以下规则:
	           1、必须有子类继承
	           2、强制子类覆写抽象类的所有抽象方法。注意:是所有抽象方法,而不是所有方法
	           3、通过子类完成抽象类的实例化对象*/
		
	}
}

/**	从熟练度来说,看来还是要加强度对static的学习与巩固	*/

//定义抽象类,创建抽象类,声明抽象类关键字:abstract
//定义一个抽象类,使用abstract声明
abstract class Abstracts{
	//创建抽象方法,声明抽象方法关键字:abstract,抽象类中的抽象方法没有方法体  “ {} ”
	//此方法并没有方法体的声明,并且存在abstract关键字,表示抽象方法
	public abstract void aBstract();
	
	//创建一个普通方法
	public void fun() {
		System.out.println("存在有方法体的方法!");
	}
}

3

package cm.abstracts.define;

//这个类用来测试通过正确创建抽象类的实例化对象使用抽象类
public class ExampleFthirtyEight {
	public static void main(String[] args) {
		//抽象类中涉及的,继承关系中,对象的向上转型,需着重学习了解。子类实例化对象,向上转型为抽象类、父类A的对象
		A a = new B();
		a.fun();
		//由于print()已经过覆写,故对象a调用的是B类中已被覆写过的print()方法
		a.print();
		
	}
}

//创建抽象类,使用关键字abstract声明
abstract class A{
	//方法有普通方法和构造方法:创建一个普通方法
	public void fun() {
		System.out.println("存在有方法体的方法!");
	}
	
	//创建一个抽象方法,没有方法体的声明,abstract关键字,
	public abstract void print();
}

//创建子类:要想通过创建实例化对象,正确使用抽象类,须得创建一个子类,强制覆写抽象类所有方法,关键字extends,满足单继承语法
class B extends A{
	//强制覆写抽象类中的所有抽象方法(不包含普通方法),print()方法。此处细节,绝大部分人在初接触时都容易混淆搞错,也包括我
	public void print() {
		System.out.println("Hello 彦舜!  Hello MyLove!  出书筹备中,誓要出书!");
	}
}

彦舜原创*正版

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值