使用抽象类的注意事项 | 带你学《Java面向对象编程》之五十三

简介: 本节为读者介绍了使用抽象类过程中的四个相关说明,并结合案例进行了较为细致的讲解。

上一篇:高度概括艺术-初识抽象类 | 带你学《Java面向对象编程》之五十二
【本节目标】
通过阅读本节内容,你将对final、static关键字有更深的理解,并对使用抽象类的有关注意事项具备一定的认识。

抽象类的相关说明

抽象类是一个重要的面向对象设计的结构,对于抽象类使用的时候需要注意以下几点问题:

  1. 在定义抽象类的时候绝对不能够使用final关键字进行定义,因为抽象类必须有子类,而final定义的类是不能够有子类的。
  2. 抽象类是作为一个普通类的加强版出现的(抽象类的组成就是在普通类的基础上扩展而来的,只是追加了抽象方法),既然是在普通类的基础上扩展的,那么普通类之中就可以定义属性和方法,那么这些属性一定是要求进行内存空间开辟的,所以抽象类一定可以提供有构造方法,并且子类也一定会按照子类对象的实例化原则进行构造调用。
abstract class Message {    //定义抽象类
    private String type ;     //消息类型
    public Message (String type) {     //类中没有提供有无参构造
        this.type = type ;
    }
    public abstract String getConnectInfo() ;           //抽象方法
    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 JavaDemo {
    public static void main(String args[]) {
         Message msg = new DatabaseMessage (“客户消息”) ;
         System.out.println(msg.getConnectInfo()) ;
         System.out.println(msg.getType ()) ;
    }
}

执行结果:
Oracle数据库连接信息。
客户消息

  1. 抽象类中允许没有抽象方法,但是即便没有抽象方法,也无法直接使用关键字new直接实例化抽象对象。
abstract class Message {    //定义抽象类
}
class DatabaseMessage extends Message {   //类的继承关系
}
public class JavaDemo {
    public static void main(String args[]) {
        Message msg = new Message () ;
    }
}

执行结果:
错误:Message是抽象的;无法实例化
即便抽象类没有实例化对象,那么也无法直接使用关键字new获取抽象类对象,必须依靠子类对象完成。

Message msg = new DatabaseMessage () ;
  1. 抽象类中可以提供有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 JavaDemo {
    public static void main(String args[]) {
        Message msg = Message.getInstance () ;    
        System.out.println(msg.getInfo()) ;
    }
}

执行结果:
数据库连接信息。
static方法永远不受到实例化对象或结构的限制,永远可以直接通过类名称进行调用。
想学习更多的Java的课程吗?从小白到大神,从入门到精通,更多精彩不容错过!免费为您提供更多的学习资源。
本内容视频来源于阿里云大学

下一篇:教你将好钢用在刀刃上-应用抽象类 | 带你学《Java面向对象编程》之五十四
更多Java面向对象编程文章查看此处

相关文章
|
1月前
|
设计模式 Java
Java基础—笔记—多态、final、抽象类、接口篇
该文介绍了编程中的多态、final和抽象类、接口相关概念。多态允许子类重写父类方法,通过父类引用调用子类方法,实现解耦和提高代码灵活性,但也可能导致无法使用子类特有功能,需通过强制类型转换解决。final用于修饰不可变的类、方法或变量,防止继承、重写和多次赋值。抽象类是一种包含抽象方法的类,用于强制子类重写特定方法,实现多态,适用于模板方法设计模式,解决代码重复问题。
20 0
|
1月前
|
Java
Java中的抽象类:深入了解抽象类的概念和用法
Java中的抽象类是一种不能实例化的特殊类,常作为其他类的父类模板,定义子类行为和属性。抽象类包含抽象方法(无实现)和非抽象方法。定义抽象类用`abstract`关键字,子类继承并实现抽象方法。抽象类适用于定义通用模板、复用代码和强制子类实现特定方法。优点是提供抽象模板和代码复用,缺点是限制继承灵活性和增加类复杂性。与接口相比,抽象类可包含成员变量和单继承。使用时注意设计合理的抽象类结构,谨慎使用抽象方法,并遵循命名规范。抽象类是提高代码质量的重要工具。
38 1
|
1天前
|
Java
Java一分钟之-抽象类与接口的应用场景
【5月更文挑战第9天】Java中,抽象类和接口用于实现多态和抽象。抽象类不能实例化,提供部分实现和定义模板;接口包含无实现的抽象方法,用于定义行为规范和解耦合。选择时,关注行为用接口,部分实现用抽象类。注意抽象类的`final`和`static`方法、接口冲突等问题,明确设计目标,适度抽象,遵循接口设计原则,以提高代码质量。
9 1
|
1天前
|
Java
Java 抽象类
5月更文挑战第4天
|
2天前
|
存储 Java 程序员
Java面向对象编程的基础概念解析
Java面向对象编程的基础概念解析
12 0
|
2天前
|
Java
Java一分钟之-类与对象:面向对象编程入门
【5月更文挑战第8天】本文为Java面向对象编程的入门指南,介绍了类与对象的基础概念、常见问题及规避策略。文章通过代码示例展示了如何定义类,包括访问修饰符的适当使用、构造器的设计以及方法的封装。同时,讨论了对象创建与使用时可能遇到的内存泄漏、空指针异常和数据不一致等问题,并提供了相应的解决建议。学习OOP需注重理论与实践相结合,不断编写和优化代码。
25 1
|
11天前
|
Java 程序员 数据格式
关于Java抽象类和接口的总结和一点个人的看法
关于Java抽象类和接口的总结和一点个人的看法
|
16天前
|
安全 Java
Java基础&面向对象&继承&抽象类
Java基础&面向对象&继承&抽象类
|
16天前
|
Java
Java从入门到精通:1.1.2深入理解Java的面向对象编程概念
Java从入门到精通:1.1.2深入理解Java的面向对象编程概念
|
23天前
|
设计模式 Java
Java接口与抽象类
Java接口与抽象类
17 0