面向对象学习笔记18 - 关键字super
1、为什么需要super?
举例1:子类继承父类之后,对父类的方法进行了重写,那么在子类中,是否
还能对父类中被重写的方法进行调用?
可以的!
举例2:子类继承父类之后,发现子类和父类中定义了同名的属性,是否可以
在子类中区分两个重名的属性?
可以的!
实现的方法就是对关键字super的使用。
2、super的理解
super = “父类的……”
3、super可以调用的结构
属性、方法、结构体
以下是具体情况
3.1super调用属性方法
子类继承父类后,我们就可以在子类的构造器或方法中,调用父类中声明的属
性和方法。(满足封装性的情况下)
如何调用?
需要使用"super."的结构。但是如果出现了子类重写了父类的方法或子父类中
出现了同名的属性时,则必须使用"super."的声明,显式的调用父类被重写的
方法或同名的属性。
但尽量避免出现子类和父类中出现同名的属性的情况出现。
3.2super调用构造器
3.2.1
子类继承父类时,不会继承父类的构造器。只能通过"super(形参列表)"
的方式调用父类指定的构造器。
3.2.2
规定:"super(形参列表)"必须声明在构造器首行。(和this类似)
3.2.3
在构造器的首行可以使用"this(形参列表)",调用本类中重载的构造器,
结合3.2.2
结论:在构造器的首行,"this(形参列表)"和"super(形参列表)"只能二选一。
3.2.4
如果子类构造器首行,既无this,也无super,默认调用的是"super()";
3.2.5
子类中的任何一个构造器,要么会调用本类中重载的构造器,要么会调用
父类的构造器,只能二选一。
3.2.6
一个类中声明有n个都早期,最多有"n-1"个构造器使用了"this(形参列表)",
剩下那个一定是"seper(形参列表)"否则会成环。
我们在通过子类的构造器创建对象时,一定在调用子类构造器的过程中,直接
或间接的调用到父类的构造器。也正因调用过父类的构造器,才会将父类中声明
的属性或方法加载到内存中,供子类对象使用。
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号