继承的本质分析
访问属性自己没有,而且只要父类中有该属性,且父类中该属性是私有的。则会报错
那么如果父类的父类也有该属性,且是Public呢?子类不会继续访问的,到上面父类有这个私有属性的时候就会停止访问。。。。。。
继承输出,从父类依次输出A类->B类->C类
继承设计的基本思想,父类的构造器完成父类属性初始化 ;子类的构造器完成子类属性初始化
(super.call()) 的顺序是直接查找父类,其他的规则一样
构造器与setter方法的联系与区别
说白了,构造器初始化,setter 修改属性 比如 构造器==出场的汽车, setter == 后期改装车辆轮胎,玻璃
构造器(Constructor):
- 构造器是一种特殊的方法,用于初始化对象的状态。当你使用
new
关键字创建对象时,构造器会被自动调用。 - 构造器必须与类名相同,并且不能有返回类型(即使是
void
也不行)。 - 构造器用于在对象创建时设置其初始状态,因此它通常接受与对象的属性相对应的参数,并将这些参数的值赋给对象的属性。
Setter方法:
- Setter方法是一种常规的方法,用于在对象创建后修改其属性的值。
- Setter方法通常有一个与属性名称相对应的名称,前面加上
set
前缀,并接受一个参数,该参数的类型与属性的类型相匹配。 - Setter方法内部通常包含一个语句,将传入的参数值赋给对象的相应属性。
联系:
-
目的:构造器和setter方法都是为了设置对象的属性。构造器在对象创建时设置初始状态,而setter方法在对象生命周期内的任何时候都可以用来修改属性的值。
-
封装性:两者都是面向对象编程中封装性的体现。封装性要求将对象的内部状态(即其属性)隐藏起来,只通过公共的方法来访问和修改这些状态。构造器和setter方法都是公共的接口,用于访问和修改对象的内部状态。
-
校验和逻辑处理:构造器和setter方法都可以包含校验逻辑或其他业务逻辑。例如,你可以在setter方法中检查传入的值是否合法,或者在构造器中根据传入的参数执行某些初始化操作。
区别:
-
调用时机:构造器在对象创建时被调用一次,而setter方法可以在对象创建后的任何时候被调用多次。
-
参数列表:构造器的参数列表通常与对象的所有属性相对应,用于初始化对象的所有属性。而setter方法通常只接受一个参数,用于修改对象的单个属性。
-
返回值:构造器没有返回值,而setter方法通常返回
void
。
super
关键字和super()
调用在用法和意义上存在明显的区别。
首先,super
关键字主要用于在子类中引用父类的成员变量或方法。当子类和父类拥有相同的成员变量或方法时,可以使用super
关键字来明确指定要访问的是父类的成员。通过使用super
关键字,可以避免在子类中创建与父类相同名称的变量或方法,同时也可以确保在子类中能够访问父类的成员。例如,你可以在子类的成员方法中使用super.属性
或super.方法
的形式来访问父类中声明的属性或方法。
另一方面,super()
是用于调用父类的构造方法。在子类的构造方法中,你可以使用super(形参列表)
的形式来调用父类中声明的指定的构造器。这样做是为了确保父类得到正确的初始化,因为在Java中,构造器的调用是自动从子类传递到父类的。
总结来说,super
关键字用于在子类中引用父类的成员变量或方法,而super()
则用于在子类的构造方法中调用父类的构造方法。两者在Java的面向对象编程中各自扮演着重要的角色,帮助实现代码的继承性和复用性。
方法在方法区中查找,属性在堆中的对象中找
super 与 this 比较