1、为什么没有默认构造方法的类被继承时出错?
继承一个没有无参构造的类时,要创建相应的有参构造才可用。
默认构造方法:
默认构造方法是指在一个类中没有显式定义构造方法时,编译器会自动生成的构造方法。它没有任何参数,并且在创建对象时会执行一些默认的初始化操作。如果类中已经定义了任何构造方法(无论是默认构造方法还是带参数的构造方法),编译器将不会自动生成默认构造方法。
继承:
继承是面向对象编程中的一种机制,允许一个类(称为子类或派生类)继承另一个类(称为父类或基类)的属性和方法。子类继承了父类的特性,并且可以扩展或重写这些特性。
现在,如果一个类没有显式定义构造方法,而且其子类尝试继承它,一般情况下是不会出错的。这是因为编译器会在子类中隐式调用父类的默认构造方法,如果父类没有定义构造方法,编译器会提供一个默认的无参构造方法供子类使用。
然而,当出现以下情况时,可能会出现继承时的错误:
-
父类没有默认构造方法且没有显式提供其他构造方法:
如果父类定义了带参数的构造方法,但没有定义默认构造方法,并且子类也没有显式调用其中一个父类的构造方法,则编译器会报错。因为子类在创建对象时需要调用父类的构造方法,而此时没有默认构造方法可供调用。 -
父类的构造方法不可见或无法访问:
如果父类的构造方法是私有的或受保护的,子类将无法访问父类的构造方法,从而导致继承时出错。在这种情况下,可以考虑修改父类的构造方法的访问修饰符,或者在父类中提供一个公共的静态方法来获取实例。 -
父类构造方法抛出异常:
如果父类的构造方法抛出异常,子类在实例化时也会因为异常而出错。在这种情况下,需要检查父类构造方法的实现,并确保它能够正确地初始化对象。
总结:默认构造方法的类被继承一般不会出错,除非父类没有默认构造方法且没有提供其他可用的构造方法,或者父类的构造方法不可见或抛出异常。在继承时,确保父类的构造方法能够正确地初始化对象,并根据需要适当调整访问修饰符和构造方法的参数。2、
2、如何解决耦合度高的问题
- 定义一个,在接口中定义方法
- 定义实现类,实现接口,实现功能代码在重写的方法内
- 使用功能:把实现功能类对象作为属性
Spring注解开发
开发步骤:
1.导包
2.创建配置类
3.写案例测试
3、IOC和DI
IOC和DI是讲的同一概念的不同角度描述,只是侧重点还有应用的位置不同
DI的三种常见注入方式为:setter注入、构造方法注入和基于注解的注入
基于注解注入
public class AController {
@Autowired
private DiService diService;
public String test001() {
return diService.test001("annotation");
}
}
/*
@Resource :java的注解,默认以byName的方式去匹配与属性名相同的bean的id,如果没有找到就会以byType的方式查找,如果byType查找到多个的话,使用@Qualifier注解(spring注解)指定某个具体名称的bean。
@Autowired :spring注解,默认是以byType的方式去匹配类型相同的bean,可以结合@Qualifier 注解根据byName方式匹配。
*/
构造方法注入
IoC 容器使用构造方法注入被依赖的实例。基于构造器的 DI 通过调用带参数的构造方法实现,每个参数代表一个依赖。
setter注入
IoC 容器使用 setter 方法注入被依赖的实例。通过调用无参构造器或无参 static 工厂方法实例化 bean 后,调用该 bean 的 setter 方法,即可实现基于 setter 的 DI。
AOP入门案例
- 导入相关坐标
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.4</version>
</dependency>
- 制作连接点(原始操作,Dao接口与实现类)
- 制作共性功能(通知类与通知)
- 定义切入点
- 绑定切入点与通知关系(切面)
AOP核心概念
名称 | 说明 |
---|---|
Joinpoint (连接点) | 指那些被拦截到的点,在 Spring 中,指可以被动态代理拦截目标类的方法 |
Pointcut (切入点) | 指要对哪些 Joinpoint 进行拦截,即被拦截的连接点。 |
Advice (通知) | 指拦截到Joinpoint之后要做的事情即对切入点增强的内容。 |
Target (目标) | 指代理的目标对象。 |
Weaving (植入) | 指把增强代码应用到目标上,生成代理对象的过程 |
Proxy (代理) | 指生成的代理对象。 |
Aspect (切面) | 切入点和通知的结合 |
AOP相关注解概念
通知 | 说明 |
---|---|
before (前置通知) | 通知方法在目标方法调用之前执行 |
after (后置通知) | 通知方法在目标方法返回或异常后调用 |
after-returning (返回后通知) | 通知方法会在目标方法返回后调用 |
after-throwing (抛出异常通知) | 通知方法会在目标方法抛出异常后调用 |
around (环绕通知) | 通知方法会将目标方法封装起来 |
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-R8A61fyQ-1690189695629)(C:\Users\Administrator\Desktop\微信截图_20230724143915.png)]
类的定义:
- class文件
- java文件
- 类型 int i = 6;Car car=new Car();
对象的定义
变量
面向对象编程
特点:封装,继承,多态
封装:隐藏细节的操作
编程思想描述:
定义类:把程序整体分割成多个部分
定义方法:把实现功能代码写在方法内
调用方法:
创建对象
通过对象调用方法,执行代码,实现功能