【JAVA学习之路 | 提高篇】抽象类与抽象方法(abstract)

简介: 【JAVA学习之路 | 提高篇】抽象类与抽象方法(abstract)

1.由来

  • 随着继承层次中一个个新子类的定义,类变得越来越具体.,而父类更一般更通用.类的设计应保证父类和子类能够共享特征.有时将类设计的非常抽象,以至于他没有具体的实例,这种类称为抽象类.
  • 我们可以声明一些图形类,如三角形,正方形,这些类有共同的特征,如求面积,求方法.这些共同的方法应抽取到父类中.但这些方法在父类中又无法给出具体的实现,而应该交给子类去实现具体的功能.父类在声明这些方法时,就只有方法签名,没有方法体,我们把没有方法体的方法称为抽象方法.(有抽象方法的类一定是抽象类)

2.格式

(1). 抽象类与抽象方法

abstract class Animal{

    public abstract void eat();

    //没有方法体

}

}

(2). 子类对抽象方法的实现.

class Dog extends Animal{

    public void eat{

        //重写或实现父类的抽象方法

        System.out.println("Dog is eating");

}

}

class Cat extends Animal {

    public void eat() {

        System.out.println("Cat is eating");

}

3.abstract修饰类

  1. abstract修饰的类被称为抽象类
  2. 抽象类不能实例化,即不能new创造对象.
  3. 抽象类中是包含构造器的,因为子类对象实例化时,会直接或间接的调用父类的构造器,从而父类的属性和方法被加载到内存中,供子类调用.
  4. 抽象类可以没有抽象方法.但有抽象方法的类,一定是抽象类.

4.abstract修饰方法

  1. abstract修饰的方法即为抽象方法.
  2. 抽象方法只有方法声明,没有方法体.
  3. 抽象方法的功能是确定的(如eat方法),通过方法的声明确定.只是不知道如何实现(无方法体).
  4. 子类必须重写父类的所有抽象方法之后,才能够实例化,否则仍是抽象类.

5.abstract不能修饰的结构

  • 属性
  • 构造器
  • 代码块

6.abstract不能与哪些关键字共用

(1). private方法 : 私有方法不能被重写.


(2). static方法 : 抽象类内抽象方法的功能由子类重写的方法实现,自身没有方法体,避免静态方法使用类进行调用.


(3). final方法 : final修饰的方法不能被重写.


(4). final修饰的类 : final修饰的类不能被继承.

相关文章
|
2天前
|
NoSQL Java Redis
如何在 Java 中操作这些 Redis 数据结构的基本方法
如何在 Java 中操作这些 Redis 数据结构的基本方法
8 2
|
3天前
|
安全 Java 程序员
【程序猿逆袭指南】Java高手的秘密武器:throws关键字,让你的方法签名霸气侧漏!
【6月更文挑战第19天】`throws`关键字是Java异常处理的关键,用于方法签名中声明可能抛出的异常,提示调用者处理。它增进代码可读性和安全性,避免运行时崩溃。通过`throws`声明多个异常,能精细规划错误处理。掌握其使用,能提升代码质量和程序员的专业形象,是Java编程中的必备技能。
|
3天前
|
安全 Java 开发者
【技术咖必看】Java异常处理新境界:throws关键字,打造万无一失的方法签名!
【6月更文挑战第19天】在Java异常处理中,`throws`关键字用于方法签名,声明可能抛出的异常,提示调用者必须处理。它区分运行时异常和检查型异常,常用于声明需要调用者捕获的检查型异常。例如,`readFile`方法`throws IOException`,强制调用者通过try-catch或同样`throws`。多异常声明允许一次声明多个可能的异常类型,增强代码健壮性。理解并善用`throws`能构建更稳定、可读的代码。
|
1天前
|
Java 对象存储
字节码学习之常见java语句的底层原理
字节码学习之常见java语句的底层原理
11 0
|
2天前
|
Java 程序员
java截取字符串的几种方法
java截取字符串的几种方法
|
2天前
|
安全 Java
JAVA反射调用方法
JAVA反射调用方法
|
3天前
|
Java 开发者
线程的诞生之路:Java多线程创建方法的抉择与智慧
【6月更文挑战第19天】Java多线程编程中,开发者可选择继承Thread类或实现Runnable接口。继承Thread直接但受限于单继承,适合简单场景;实现Runnable更灵活,支持代码复用,适用于如银行转账这类需多线程处理的复杂任务。在资源管理和任务执行控制上,Runnable接口通常更优。
|
2天前
|
安全 Java
JAVA多线程通信新解:wait()、notify()、notifyAll()的实用技巧
【6月更文挑战第20天】Java多线程中,`wait()`, `notify()`和`notifyAll()`用于线程通信。在生产者-消费者模型示例中,它们确保线程同步。`synchronized`保证安全,`wait()`在循环内防止虚假唤醒,`notifyAll()`避免唤醒单一线程问题。关键技巧包括:循环内调用`wait()`,优先使用`notifyAll()`以保证可靠性,以及确保线程安全和正确处理`InterruptedException`。
|
2天前
|
安全 Java
深入解读JAVA多线程:wait()、notify()、notifyAll()的奥秘
【6月更文挑战第20天】JAVA多线程中,wait(), notify(), notifyAll()是Object类的关键同步机制。wait()让线程等待并释放锁,直到被notify()或notifyAll()唤醒或超时。它们必须在同步块中使用,持有锁的线程调用。notify()唤醒一个等待线程,notifyAll()唤醒所有。最佳实践包括:与synchronized结合,循环检查条件,避免循环内notify(),通常优先使用notifyAll()。
|
2天前
|
Java 程序员
从菜鸟到大神:JAVA多线程通信的wait()、notify()、notifyAll()之旅
【6月更文挑战第21天】Java多线程核心在于wait(), notify(), notifyAll(),它们用于线程间通信与同步,确保数据一致性。wait()让线程释放锁并等待,notify()唤醒一个等待线程,notifyAll()唤醒所有线程。这些方法在解决生产者-消费者问题等场景中扮演关键角色,是程序员从新手到专家进阶的必经之路。通过学习和实践,每个程序员都能在多线程编程的挑战中成长。