ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java-抽象方法 抽象类

2022-07-15 19:35:50  阅读:124  来源: 互联网

标签:Java 子类 Person 抽象 run 抽象类 方法


1、抽象方法
如果父类的方法本身不需要实现任何功能,仅仅是为了定义方法签名,目的是让子类去覆盖它,那么,可以把父类的方法声明为抽象方法。

class Person {    
    // 定义抽象方法
    public abstract void run();
}

把一个方法声明为abstract,表示它是一个抽象方法,本身没有实现任何方法语句。因为这个抽象方法本身是无法执行的,所以Person类无法被实例化。并且编译器会报错无法编译Person类,因为它包含抽象方法。
必须把Person类本身也声明为abstract,才能正确编译它,如:

// 抽象方法必须定义在抽象类中
  abstract class Person {
     public abstract void run(); 
 }

2、抽象类
如果一个class定义了方法,但没有具体执行代码,这个方法就是抽象方法,抽象方法用abstract修饰。因为无法执行抽象方法,因此这个类也必须申明为抽象类(abstract class)。
抽象类的意义:

  • 封装共有的属性和行为-------------------代码复用
  • 为所有派生类提供统一的类型----------向上造型(代码复用)
  • 可以包含抽象方法,为所有派生类提供统一的入口(向上造型后能点出来),同时可以达到强制必须重写的目的(相当于制定了一个标准)
// 编译报错,Person不能被实例化
Person p = new Person(); 

抽象类本身被设计成只能用于被继承,因此,抽象类可以强迫子类实现其定义的抽象方法,否则编译会报错。抽象方法实际上相当于定义了"规范"。

abstract class Person {  // 定义抽象类Person
    public abstract void run();   // 抽象方法run()
}
 
 
class Student3 extends Person {   // 继承抽象类Person
    @Override
    public void run() {   // 必须覆写父类run()方法,否则会报错
        System.out.println("Student.run");
    }
}
 
Student p = new Student();
p3.run();       // 运行结果:Student.run

3、面向抽象编程
定义了抽象类Person,以及具体的Student子类的时候,可以通过抽象类Person类型去引用具体的子类实例。
这种引用抽象类的好处在于,对其进行方法调用,并不关心Person类型变量的具体子类型。

// Person类型的引用变量s指向Student实例。
Person s = new Student();
s.run();

这种尽量引用高层类型,避免引用实际子类型的方式,称之为面向抽象编程。
面向抽象编程本质:
(1)上层代码只定义规范
(2)不需要子类就可以实现业务逻辑
(3)具体的业务逻辑由不同的子类实现,调用者并不关心

4、总结
通过abstract定义的方法是抽象方法,它只定义没有实现。抽象方法定义了子类必须实现的接口规范。
定义了抽象方法的class必须被定义为抽象方法,从抽象类继承的子类必须实现抽象方法。
如果不实现抽象方法,则该子类仍是一个抽象类。
面向抽象编程使得调用者只关心抽象方法的定义,不关心子类的具体实现。

标签:Java,子类,Person,抽象,run,抽象类,方法
来源: https://www.cnblogs.com/burberry/p/16482578.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有