抽象类的相关说明
抽象类是一个重要的面向对象设计的结构,对于抽象类使用的时候需要注意一几点问题:
- 在定义抽象类的时候绝对不能够使用final关键字进行定义,因为抽象类必须有子类,而final定义的类是不能够有子类的。
范例:
final abstract class test //矛盾组合
{
}
结果:
2. 抽象类是作为一个普通类的加强版出现的(抽象类的组成就是在普通类的基础上扩展而来的,只是追加了抽象方法),既然是在普通类的基础上扩展的,那么普通类之中就可以定义属性和方法,那么这些属性一定是要求进行内存空间开辟的,所以抽象类一定可以提供构造方法,并且子类也一定会按照子类对象的实例化原则进行构造调用。
范例:抽象类创建构造方法
abstract class Message{//定义抽象类
private String type;//消息类型
public Message(String type){//有参构造
this.type = type;
}
public abstract String getConnextInfo();//抽象方法
public String getType(){//普通方法
return this.type;
}
}
子类:
class DatabaseMessage extends Message
{
public DatabaseMessage(String type){
super(type);//调用父类构造
}
public String getConnextInfo(){
return "数据库连接信息";
}
}
主方法:
class JavaDemo
{
public static void main(String[] args)
{
Message msg = new DatabaseMessage("客户信息"); //向上转型
//调用普通方法
System.out.println(msg.getType());
}
}
结果:
- 抽象类中允许没有抽象方法,但是即便没有抽象方法,也无法直接使用关键字new直接实例化抽象类对象。
范例:
class JavaDemo
{
public static void main(String[] args)
{
Message msg = new Message("客户信息");
}
}
abstract class Message{//定义抽象类
}
结果:
即便抽象类没有实例化对象,也无法直接使用关键字new获取抽象类的对象,必须依靠子类对象完成。
- 抽象类中可以提供有static方法,并且该方法不受到抽象类对象的局限。
范例:
抽象类:
abstract class Message{//定义抽象类
public abstract String getInfo();//抽象方法
public static Message getInstance(){//静态方法,不受类实例化限制
return new DatabaseMessage();
}
}
子类:
class DatabaseMessage extends Message
{
public String getInfo(){
return "数据库连接信息";
}
}
主方法:
class JavaDemo
{
public static void main(String[] args)
{
Message msg = Message.getInstance();
System.out.println(msg.getInfo());
}
}
结果:
static方法永远不受到实例化对象或结构的限制,永远可以直接通过名称进行调用。