韩顺平Java10(封装、继承、多态01)
封装(encapsulation)
- 好处:
- 隐藏实现细节
- 可以对数据进行验证,保证安全且合理
- 实现步骤:
为确保安全可以在构造器中写上set方法
public Person(String name, int age, double salary, String job) { this.setName(name); this.setAge(age); this.setSalary(salary); this.setJob(job); }
继承(extend)
- 引出:为了解决相同类的代码复用问题
- 基本语法:
- 继承细节:
1. 子类继承了父类所有的属性和方法,但是父类的私有属性和方法不能在子类中直接访问,要通过(父类提供的)公共的方法去访问(即父类中public属性的get方法)。而非私有的属性和方法可以在子类中直接访问。
2.子类必须(先)调用父类的构造器完成父类的初始化。(因为会有一句隐藏的默认super())
3.当创建子类的对象时,无论使用子类的哪个构造器,默认情况下都会去调用父类的无参构造器,如果父类没有提供无参构造器,则必须在子类的构造器中使用super去指定使用父类的哪个构造器完成对父类的初始化工作,否则编译不会通过。
4. 如果希望指定去调用父类的某个构造器,则需要在子类的构造器中显式地调用一下:super(参数列表)
5.super在使用时,必须放在构造器的第一行(super只能在构造器中使用)
6.super()和this()都只能放在构造器的第一行,因此这两个方法不能共存于同一个构造器。
7.Java中所有类都是Object类的子类,Object类是所有类的父类
8.父类构造器的调用不仅限于直接父类,可以一直往上追溯到Object类(顶级父类)
9.子类最多只能继承一个父类(直接继承),即Java中是单继承机制。
10.不能滥用继承,子类和父类必须满足 is-a 的逻辑关系
- 继承本质分析(重要!!!)
小练习:
解析:先调用B的无参构造器,发现调用了自己的有参构造器。有参构造器里有一个隐藏的super()来调用父类的无参构造器。
所以先调用A 的无参构造器输出一个a,然后继续B的有参构造器输出b name,最后回到B的无参构造器输出b
super关键字
- 简介:super代表对父类的引用,用于访问父类的属性、方法、构造器。
注意细节:
1.可以访问父类的属性,但不能访问父类的private属性(super.属性名 就可以访问父类的属性)
2.可以访问父类的方法,但不能访问父类的private方法(super.方法名(参数列表) 就可以访问父类的方法)
3.可以访问父类的构造器,但只能放在第一句,只能出现一句!(super(参数列表))
4.好处:分工明确——父类属性由父类初始化,子类属性由子类初始化
5.当子类中有和父类重名的方法(属性)时,为了访问父类的成员,必须使用super,如果没有重名,则使用super、this、或者直接调用是一样的。
6.super的访问不仅限于直接父类,如果爷爷类中有同名的成员,也可以使用super去访问爷爷类的成员;如果多个基类(上级类)中都有同名的成员,则使用super访问时遵循就近原则和相关的权限要求。
(cal()是父类的方法)
super和this的比较
本文来自博客园,作者:紫英626,转载请注明原文链接:https://www.cnblogs.com/recorderM/p/15674472.html