抽象类
Posted dododo70
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了抽象类相关的知识,希望对你有一定的参考价值。
类继承的主要作用在于可以扩充已有类的功能。父类无法强制约定子类覆写某些方法。
完善的类:可以直接使用的类,在开发之后都是继承抽象类。
抽象类的基本定义:
1.抽象类的主要作用在于对子类中的覆写方法进行约定。
2.抽象方法:使用了 abstract 关键字定义,并且没有提供方法体的方法。
3.抽象方法所在的类必须是抽象类。
4.抽象类必须使用 abstract 定义。(在普通类的基础上追加抽象方法就是抽象类)
5.抽象类无法实例化
抽象类的使用:
1. 不能使用 final 关键字定义抽象类,因为抽象类必须有子类,而 final 定义的类不能被继承。
2. 抽象类是作为一个普通类的加强版出现的(就是在普通类的基础上追加了抽象方法),抽象类可以提供构造方法,而且子类也会按照子类对象的实例化原则对父类构造进行调用。
3. 抽象类中允许没有抽象方法,不管有没有抽象方法,都无法实例化抽象类对象。
4. 抽象类中可以提供 static 方法,该方法不会受到抽象类对象的局限(可以通过类名称直接调用)
//定义抽象类 abstract class Message { private String type; public abstract String getConnectInfo(); public void setType(String type){ this.type = type; } public String getType(){ return this.type; } } //子类继承抽象父类 class DatabaseMessage extends Message { //子类覆写抽象方法 public String getConnectInfo(){ return "Oracle的连接信息"; } } public class Demo{ public static void main(String args[]){ Message msg = new DatabaseMessage(); //(向上转型)实例化 msg.setType("用户信息"); //子类调用父类方法 System.out.println(msg.getConnectInfo()); System.out.println(msg.getType()); } } /*------------------------------------------------------ E:Javacode>java Demo Oracle的连接信息 用户信息 E:Javacode>*/
//定义抽象类-抽象类的构造方法 abstract class Message { private String type; public abstract String getConnectInfo(); //定义构造 public Message(String type){ this.type = type; } public void setType(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 Demo{ public static void main(String args[]){ Message msg = new DatabaseMessage("用户信息"); //(向上转型)实例化 System.out.println(msg.getConnectInfo()); System.out.println(msg.getType()); } } /*------------------------------------------------------ E:Javacode>java Demo Oracle的连接信息 用户信息 E:Javacode>*/
// 抽象类中使用 static 方法,可以直接进行调用 abstract class Message { public abstract String getInfo(); public static Message getInstance(){ return new DatabaseMessage(); } } class DatabaseMessage extends Message { public String getInfo(){ return "数据库连接信息"; } } public class Demo{ public static void main(String args[]){ Message msg = Message.getInstance(); System.out.println(msg.getInfo()); } } /*------------------------------------- E:Javacode>java Demo 数据库连接信息 E:Javacode>*/
以上是关于抽象类的主要内容,如果未能解决你的问题,请参考以下文章
如何通过单击片段内的线性布局从片段类开始新活动?下面是我的代码,但这不起作用
设计模式 行为型模式 -- 观察者模式(发布-订阅(Publish/Subscribe)模式)