韩顺平Java10(封装、继承、多态01)

封装(encapsulation)

 

 

  •  好处:
  1. 隐藏实现细节
  2. 可以对数据进行验证,保证安全且合理
  • 实现步骤:

 

为确保安全可以在构造器中写上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的比较

 

 

posted @ 2021-12-11 01:31  紫英626  阅读(54)  评论(0编辑  收藏  举报

紫英