面向对象初步:构造方法和this关键字

一、构造方法介绍

(一)作用

  1. 创建对象
  2. 完成初始化
  3. 默认无参构造方法
  4. 自定义构造方法

(二)分类

 

二、构造方法的声明形式

(一) 声明

 【访问权限修饰符】类名 ( 形式参数列表 )

   {

            执行语句;

     }

 

(二)特点

构造方法名与类名相同

没有方法返回值,也不用定义返回值类型,连void也不用。

形参可以是0个、1个或者多个。

构造方法中可以编写一切符合java规范的代码,但是通常是对成员变量进行初始化。

 

三、默认的构造方法

任何一个Java类都默认有一个无参构造方法。也就是说,即使类中没有声明无参的构造方法,照样可以直接使用没有参数的构造方法。

 

然而,只要在一个Java类中定义了一个构造方法后,默认的无参构造方法即失效。

 

四、构造方法与普通方法的区别

 

 

五、构造方法的重载

重载:在同一个类中,方法名相同,参数列表不同(参数的类型,参数个数,参数的顺序)

构造方法的重载 : 是指同一个类中存在着若干个具有不同参数列表的构造函数,名称一样都是类名.

 

六、this关键字

(一)this关键字的作用

表示对当前对象的引用    

(二)this关键字的用法

访问成员变量:this.成员变量名    

访问构造方法:this(形参列表)      必须放在方法的第一行

访问成员方法:this.方法名();    

七、创建对象的过程

1、把MemberCard 类的字节码加载到内存;

2、根据MemberCard 类的声明,把属性name、balance初始化到内存堆,并赋初值,分别为null和0.0;

3、根据代码,调用两个参数的构造方法,把lily、2000赋值给name和balance;

4、在栈中创建一个变量card2 ,用来引用堆中对象的具体属性,card2 的值是一个16进制的数,表示一个虚地址

八、封装

(一)封装的作用和意义

1.定义

把对象的属性和方法用private修饰为一个独立的整体,外界不能访问,并尽可能隐藏对象的内部实现细节.

2.作用

程序设计追求“高内聚,低耦合”。(把复杂性封装起来,用的时候尽可能的简单)

   高内聚:就是类的内部数据操作细节自己完成,不允许外部干涉。

   低耦合:是仅暴露少量的方法给外部使用,尽量方便外部调用。

 

 

(二)封装的优点

1.提高代码的安全性

2.提高代码的复用性

3.“高内聚”:封装细节,便于修改内部代码,提高可维护性

4.“低耦合”:简化外部调用,便于调用者使用,便于扩展和写作

(三)封装的细节

  1. 用private修饰成员
  2. 本类提供public方法(setter,getter)调用private的成员  构造函数
  3. 外界调用public方法

 

一般使用private访问权限修饰来修饰成员变量

提供相应的get、set方法来访问相关属性,这些方法通常是public修饰的。以提供对属性的赋值与读取操作。

一些只用于本类的辅助性方法,可以使用private修饰,

希望其他类调用的方法用public修饰。

(四)案例

创建User类,username,password,对成员变量进行封装,对外提供访问成员变量的方法,包括setter设置值,getter取得值方法

public class User {
   private String username;
   private String password;

    public User(String username, String password) {
        this.username = username;
        this.password = password;
    }

    public User() {
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }
}

 

九、继承

(一)继承的概念及意义

所谓继承是指一个类的定义可以基于另外一个已经存在的类,即子类基于父类,从而实现父类代码的重用,子类能吸收已有类的数据属性和行为,并能扩展新的能力。

通过使用继承我们能够非常方便地复用以前的代码,能够大大的提高开发的效率

(二)继承的声明形式

【访问权限修饰符】【修饰符】子类名  extends  父类名{

           子类体

  }

 

子类能够使用父类的非私有的成员变量和成员方法,并能扩展新的功能

案例:

 

(三)继承的优点

1.提高了代码的复用性

多个类相同的成员可以放到同一个类中(父类)

2.提高了代码的维护性

如果功能的代码需要修改,修改一处即可

3.让类与类之间产生了关系,是多态的前提

其实这也是继承的一个弊端:类的耦合性很强

(四)继承的特点以及注意事项

1.继承的特点

1.Java只支持单继承,不支持多继承。

一个类只能有一个父类,不可以有多个父类。

class SubDemo extends Demo{} //ok            class SubDemo extends Demo1,Demo2...//error

2.支持多层继承(继承体系)

class A{}

class B extends A{}

class C extends B{}

2.继承的注意事项

子类能使用父类所有非私有的成员(成员方法和成员变量)

子类不能继承父类的构造方法,但是可以通过super(后面讲)关键字去访问父类构造方法。

不要为了部分功能而去继承

我们到底在什么时候使用继承呢?继承中类之间体现的是:”is a”的关系。(……是……的一种) 

 

(五)继承中成员变量的关系

子父类中同名和不同名的成员变量

在子类方法中访问一个变量:

1.首先在子类局部范围找

2.然后在子类成员范围找

3.最后在父类成员范围找(肯定不能访问到父类局部范围)

4.如果还是没有就报错。(不考虑父亲的父亲…)

就近原则

(六)super关键字

super:指的是父类对象

super的用法和this很像

this代表本类对应的引用。

super代表父类存储空间的标识(可以理解为父类引用)

用法(this和super均可如下使用)

 

访问成员变量

1.this.成员变量         super.成员变量

2.访问构造方法(子父类的构造方法问题讲)

this(…)          super(…)

3.访问成员方法(子父类的成员方法问题讲)

this.成员方法()               super.成员方法()

 

(七)继承中构造方法的关系

子类中所有的构造方法默认都会访问父类中无参数的构造方法

为什么呢?

因为子类会继承父类中的数据,可能还会使用父类的数据。子类初始化之前,一定要先完成父类数据的初始化。

每一个构造方法的第一条语句默认都是:super()

如何父类中没有构造方法,该怎么办呢?

子类通过super去显示调用父类其他的带参的构造方法

子类通过this去调用本类的其他构造方法:本类其他构造也必须首先访问了父类构造

一定要注意:

super(…)或者this(….)必须出现在第一条语句上。

(八)继承中成员方法的关系

通过子类对象去访问一个方法

首先在子类中找

然后在父类中找

如果还是没有就报错。(不考虑父亲的父亲…)

(九)方法覆盖

1.方法覆盖的定义

子类可以重写父类中某一个方法,称为方法覆盖,也称方法重写,是继承中非常重要的知识点。如果子类需要修改从父类继承到的方法的方法体,就可以使用方法覆盖。

2.方法覆盖的原则

同名

同参

同返回值

访问权限不能缩小

 

posted @ 2022-04-20 23:03  MM&WW  阅读(53)  评论(0编辑  收藏  举报