课时82:抽象类的相关说明
摘要:
1.抽象类的定义
2.抽象类的概念
3.抽象类的使用方法
4.抽象类中的 static 方法使用
01.抽象类的定义
抽象类在面向对象设计中占据重要地位,在使用抽象类时需要注意以下几点,在定义抽象类的时候,千万不要使用 Final 关键字进行定义,因为抽象类必须有子类,而 Final 定义的类是不能够有子类
final abstract class Message{ //定义抽象类 private string type; //消息类型 public abstract string getConnectInfo()://抽象方法 public void setrype(string type){ //普通方法 this.type=type ; } public string getType(){ //普通方法 return this.type ; } } class DatabaseMessage extends Message { //类的继承关系 public string getConnectInfo(){//方法覆写 return "oracle数据库连接信息。"; } } public class JavaDemo { public static void main(string args[]){ Message msg = new DatabaseMessage();
02.抽象类的概念
抽象类是作为一个普通类的加强版出现的(抽象类的组成就是在普通类的基础上扩展而的,只是追加了抽象方法),那么普通类之中就可以定义属性和方法,那么这些属性一定是要求进行内存空间开辟的。抽象类不仅可以提供构造方法,并且子类也一定会按照子类对象的实例化原则进行父类构造调用。
final abstract class Message{ //定义抽象类 private string type; //消息类型 public Message(string type){ //类中没有提供有无参构造this.type type; } public abstract string getConnectInfo()://抽象方法 public void setrype(string type){ //普通方法 this.type=type ; } public string getType(){ //普通方法 return this.type ; } } class DatabaseMessage extends Message { //类的继承关系 public string getConnectInfo(){//方法覆写 return "oracle数据库连接信息。"; } } public class JavaDemo { public static void main(string args[]){ Message msg = new DatabaseMessage(); msg.setType("客户消息"); System.out.println(msg.getConnectInfo()); System.out.println(msg.getType()); } }
出现错误。它需要的是无参构造,但实际使用的是带有参数的构造,这表明需要明确调用的有参构造操作。
abstract class Message{ //定义抽象类 private string type; //消息类型 public Message(string type){ //类中没有提供有无参构造this.type type; } public abstract string getConnectInfo()://抽象方法 public void setrype(string type){ //普通方法 this.type=type ; } public string getType(){ //普通方法 return this.type ; } } class DatabaseMessage extends Message { //类的继承关系 public DatabaseMessage(string str){ super(str); } public string getConnectInfo(){//方法覆写 return "oracle数据库连接信息。"; } } public class JavaDemo { public static void main(string args[]){ Message msg = new DatabaseMessage("客户消息"); System.out.println(msg.getConnectInfo()); System.out.println(msg.getType()); } }
03.抽象类的使用方法
抽象类中允许没有抽象方法但是即便没有抽象方法,也无法直接使用关键字 New 直接实例化抽象类对象。
abstract class Message{ //定义抽象类 } class DatabaseMessage extends Message { //类的继承关系 } public class JavaDemo { public static void main(string args[]){ Message msg = new Message(); } }
Message 是抽象的,无法实例化,只要加上 abstract 是抽象类,并且永远无法实例化。只有通过子类才能获取抽象类的对象。
即使抽象类没有实例化对象,那么也无法直接使用关键字 New 获取抽象类的对象,必须通过子类对象来实现。
04.抽象类中的 static 方法使用
抽象类是可以提供 static 方法的,而且这些方法不受抽象类对象的局限。
abstract class Message{ //定义抽象类 Public abstract String getInfo()//抽象方法 public static Message getinstance(){ return new DatabaseMessage(); } } class DatabaseMessage extends Message { //类的继承关系 publicString getInfo() return"数据库连接信息。"; } } public class JavaDemo { public static void main(string args[]){ Message msg = Message.getinstance() System.out.println(msg.getinfo()); } }
Message 是抽象类对象,Static 方法不受对象实例化的限制。编译正常执行,可以完成。
接下来在大门中找到一个名为Message的实例,并接上Get Info进行操作。
Static 方法永远不受到实例化对象或结构的限制,永远可以直接通过类名称进行调用。这就是抽象类的相关说明,就是在普通类的上面新增特定功能,仅此而已。