Java学习:封装、继承、多态

一、 封装

1、概念:
  将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问。

2、好处:

  • 只能通过规定的方法访问数据。
  • 隐藏类的实例细节,方便修改和实现。

3、封装的实现步骤
在这里插入图片描述
    需要注意:对封装的属性不一定要通过get/set方法,其他方法也可以对封装的属性进行操作。当然最好使用get/set方法,比较标准。

A、访问修饰符
在这里插入图片描述
从表格可以看出从上到下封装性越来越差。
B、this关键字

1.this关键字代表当前对象

this.属性 操作当前对象的属性

this.方法 调用当前对象的方法。

2.封装对象的属性的时候,经常会使用this关键字。

3.当getter和setter函数参数名和成员函数名重合的时候,可以使用this区别。如:
在这里插入图片描述  
C、Java 中的内部类

内部类( Inner Class )就是定义在另外一个类里面的类。与之对应,包含内部类的类被称为外部类。

内部类的主要作用如下:

1. 内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类。

2. 内部类的方法可以直接访问外部类的所有数据,包括私有的数据。

3. 内部类所实现的功能使用外部类同样可以实现,只是有时使用内部类更方便。

内部类可分为以下几种:

  • 成员内部类
  • 静态内部类
  • 方法内部类
  • 匿名内部类

二、继承

1、继承的概念

继承是类与类的一种关系,是一种“is a”的关系。比如“狗”继承“动物”,这里动物类是狗类的父类或者基类,狗类是动物类的子类或者派生类。如下图所示:
在这里插入图片描述
 注:java中的继承是单继承,即一个类只有一个父类。
 
2、继承的好处
 子类拥有父类的所有属性和方法(除了private修饰的属性不能拥有)从而实现了实现代码的复用; 
3、语法规则,只要在子类加上extends关键字继承相应的父类就可以了:
在这里插入图片描述
A、方法的重写

子类如果对继承的父类的方法不满意(不适合),可以自己编写继承的方法,这种方式就称为方法的重写。当调用方法时会优先调用子类的方法。
 重写要注意:
  a、返回值类型
  b、方法名
  c、参数类型及个数
 都要与父类继承的方法相同,才叫方法的重写。

重载和重写的区别:
  方法重载:在同一个类中处理不同数据的多个相同方法名的多态手段。
  方法重写:相对继承而言,子类中对父类已经存在的方法进行区别化的修改。

B、继承的初始化顺序
  1、初始化父类再初始化子类
  2、先执行初始化对象中属性,再执行构造方法中的初始化。
 基于上面两点,我们就知道实例化一个子类,java程序的执行顺序是:
 父类对象属性初始化---->父类对象构造方法---->子类对象属性初始化—>子类对象构造方法

C、final关键字

使用final关键字做标识有“最终的”含义。
  1. final 修饰类,则该类不允许被继承。
  2. final 修饰方法,则该方法不允许被覆盖(重写)。
  3. final 修饰属性,则该类的该属性不会进行隐式的初始化,所以 该final 属性的初始化属性必须有值,或在构造方法中赋值(但只能选其一,且必须选其一,因为没有默认值!),且初始化之后就不能改了,只能赋值一次
  4. final 修饰变量,则该变量的值只能赋一次值,在声明变量的时候才能赋值,即变为常量。

D、super关键字

在对象的内部使用,可以代表父类对象。
  1、访问父类的属性:super.age
   2、访问父类的方法:super.eat()
 super的应用:
 首先我们知道子类的构造的过程当中必须调用父类的构造方法。其实这个过程已经隐式地使用了我们的super关键字。

这是因为如果子类的构造方法中没有显示调用父类的构造方法,则系统默认调用父类无参的构造方法。

那么如果自己用super关键字在子类里调用父类的构造方法,则必须在子类的构造方法中的第一行。

要注意的是:如果子类构造方法中既没有显示调用父类的构造方法,而父类没有无参的构造方法,则编译出错。

(补充说明,虽然没有显示声明父类的无参的构造方法,系统会自动默认生成一个无参构造方法,但是,如果你声明了一个有参的构造方法,而没有声明无参的构造方法,这时系统不会动默认生成一个无参构造方法,此时称为父类有没有无参的构造方法。)

E、Object类

Object类是所有类的父类,如果一个类没有使用extends关键字明确标识继承另一个类,那么这个类默认继承Object类。
 Object类中的方法,适合所有子类!!!(Object中的方法参见API)

三、多态

面向对象的最后一个特性就是多态,那么什么是多态呢?多态就是对象的多种形态。
 java里的多态主要表现在两个方面:

1.引用多态   
  父类的引用可以指向本类的对象;
  父类的引用可以指向子类的对象;
  这两句话是什么意思呢,让我们用代码来体验一下,首先我们创建一个父类Animal和一个子类Dog,在主函数里如下所示:
在这里插入图片描述
  注意:我们不能使用一个子类的引用来指向父类的对象,如:。
  就以上面的例子来说,我们能说“狗是一种动物”,但是不能说“动物是一种狗”,狗和动物是父类和子类的继承关系,它们的从属是不能颠倒的。当父类的引用指向子类的对象时,该对象将只是看成一种特殊的父类(里面有重写的方法和属性),反之,一个子类的引用来指向父类的对象是不可行的!!

2.方法多态
  根据上述创建的两个对象:本类对象和子类对象,同样都是父类的引用,当我们指向不同的对象时,它们调用的方法也是多态的。
  创建本类对象时,调用的方法为本类方法;
  创建子类对象时,调用的方法为子类重写的方法或者继承的方法;
  使用多态的时候要注意:如果我们在子类中编写一个独有的方法(没有继承父类的方法),此时就不能通过父类的引用创建的子类对象来调用该方法!!!
  注意: 继承是多态的基础。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值