JavaSE之面向对象编程-抽象类与接口

1.抽象类的定义与使用

定义:抽象类只是在普通类的基础上多扩充了一些抽象方法而已。
抽象方法:指的是只声明而未实现的方法,(没有方法体)

所有抽象方法要求使用abstract来定义,并且抽象方法所在的类也一定要使用abstract来定义,表示抽象类。

2.抽象类的使用原则

a. 所有的抽象类必须右子类(abstract与final不能同时使用)
b. 抽象类的子类必须覆写抽象类的所哟偶抽象方法(abstract与private也不能同时使用)
c. 抽象类要想创建实例化对象,必须通过子类向上转型为其实例化。(抽象类无法创建实例化对象)

abstract class Person {
    private String name;
    private String getName(){
        return name;
    }
    public abstract void fun();
}
class Student extends Person{
    public void fun(){
        System.out.println("子类继承抽象类");
    }
}
public class Test10_18{
    public static void main(String[] args){
        Person per = new Student();
        per.fun();
    }
}

3.抽象类的相关规定

a.抽象类也允许提供构造方法,并且子类也照样遵循对象实例化流程,先调用父类的调用方法而后调用子类构造方法

b.抽象类中不允许定义任何的抽象方法,但抽象类依然无法直接创建实例化对象。

c.
abstract与final不能一起用;
abstract与private也不能一起用;

d.内部抽象类(了解)

4.模板设计模式(封装算法)

-------基于抽象类,核心是封装算法。

开闭原则(OCP):一个软件实体如类、函数、模块应该对扩展开放对修改关闭。

模板方法定义了一个算法的步骤,并且允许子类为一个或 多个步骤提供具体实现

模板(模板方法)模式:Servlet、AQS
在一个方法中定义一个方法的骨架,并将一些具体步骤延迟到子类中实现。
模板模块使得子类可以在不改变算法结构的基础上,重新具体定义算法中的某些步骤。

5.接口的定义与使用

接口优先原则:在一个操作既可以使用抽象类又可以使用接口的时候,优先考虑用接口。

接口的定义
接口就是一个抽象方法和全局常量的集合(JDK8以前)
接口使用interface定义
接口的命名规范:接口前加 I 来区分接口与类。

子类实现接口使用implements关键字,并且子类可以同时实现多个父接口(使用接口实现都继承)一般使用接口*+Impl*来命名子类。

5.1接口的使用限制

5.1.1

接口中只有public权限(不管是属性还是方法。其权限均为pubilc)
接口中public、static、final、abstract均可以省略
阿里编码规约:接口方法和属性不要加任何修饰符,public也不要加,保证代码简洁性。

5.1.2

当一个子类既需要实现接口又需要继承抽象类时,请先使用extend继承一个抽象类,而后使用implements实现多个接口

5.1.3

抽象类可以使用implements实现多个接口,单接口不能extends抽象类。

5.1.4

接口可以使用extends继承多个父接口。

5.2接口应用

a.定义操作标准(USB2.0标准)

b.表示一种能力,进行一项操作

c.在分布式开发中暴露远程服务方法

6.工厂模式

6.1简单工厂:用于没有产品族并且产品个数较少

专门定义一个类(第三方)来创建其他实例(解耦,将客户端创建对象的操作解耦到外部第三方类),被创建的实例通常都具有相同的父类。
(解耦总的一句话来说,减少依赖,抽象业务和逻辑,让各个功能实现独立。)

组成:
a.一个抽象产品类
b.N个具体产品类
c.一个工厂类

6.2工厂方法模式(优点在于横向发展)–产品族

定义一个用来创建对象 的接口,让子类实现实例化哪一个工厂。

组成:
a.一个抽象产品类
b.N个具体产品类
c.一个抽象工厂
d.对于具体工厂(每个产品族对应一个具体工厂)

7.代理模式–Spring-AOP

特点:两个子类共同实现一个接口,其中一个子类负责真是业务实现,另一个子类完成辅助真实业务主题的操作。

猜你喜欢

转载自blog.csdn.net/qq_40933663/article/details/83578369