Java中的三大特性(封装,继承,多态)

在Java中,面向对象有区别于其他语言的三个最大的特点:封装性,继承性,多态性。那么下面我们来了解一下什么是封装,继承与多态。在了解这三大特性之前,需要对Java的面向对象思想有初步的了解,不了解的可以看我的上一篇文章:http://t.csdnimg.cn/FkP2P

封装性

首先要先理解什么是封装,封装可以简单先用包装来进行说明,我们在电脑和手机上看不到任何裸露在外的电线,这是为了安全起见,把所有的电线和电子元件都放在了手机和电脑的内部,这样的话我们不会因为触碰到电线而发生意外,同样的,手机也不会因为电线被我们扯断而发生故障,既是对我们的保护,也是对系统的保护。在Java中也是如此。

在现实中我们是采用了包装来让外部看不到内部结构,只留下了部分的功能(接口)来供我们外部使用,那在编程中呢?

有的人已经想到了,就是用我们上次提到过的权限修饰符来完成这个功能。权限修饰符规定了这个属性的可访问范围,如果在可访问范围以外,就相当于是我们在现实中看不到包装内部一样,被系统隐藏了起来。那全部隐藏起来,我们用不了任何的功能了怎么办,这时候就需要类来给我们创建出对外开放的接口(也就是使用方法来进行访问和修改)举个代码例子来看就是下面这个了:

class Main{
    private String name;//私有化的属性
    
    public String getName(){//类对外部提供的获取姓名属性的方法
        return name;
    }

    public void setName(String name){//类提供的设置姓名的方法
        this.name = name;
    }
    
}

在上述代码中我们可以很直观的看出,由于使用了private修饰属性,使得name属性无法被外部访问到,这就实现了对name的一个封装,通过对应的set和get方法,我们可以对属性进行操作,这就是Java中的一个基本的封装。

使用封装有很多好处,比如在以后的项目实战中,我们的属性是不能被外部随意改动的,比如说在游戏中我有一个等级的属性,直接被外部获取修改后就变成了他不该有的数值,这就是导致系统的混乱,而解决办法也很简单,既然外部是通过get和set方法进行获取,那不提供其中的set方法外部就无法改动了。

除此之外,使用方法我还可以在方法中写逻辑,同样用游戏里的等级来说明,我需要让等级不为负数,那就只需要在对应等级的方法里加上大于0的判断就可以了。

自动装箱和自动拆箱

Java中还有一个很好的特点,就是可以进行自动装箱和自动拆箱。首先还是概念,什么事自动装箱和自动拆箱?我们在买快递的时候,卖家会把货物进行包装,发送给你,然后你在自己拆快递,这就是拆装箱,在加上自动就是把中间包装和拆解的过程隐藏,不需要手动来完成。

在JAVA中的拆装箱是对于基本数据类型而言,因为Java是面向对象的语言,使用的数据也大多都是对象类型,而不是基本数据类型,因此,基本数据类型无法在对象的容器中进行传递,这个时候我们就需要使用买快递的这个流程来解决了。

首先,我们对需要传递的数据进行包装,然后传递,最后在进行拆箱,就可以得到原本的数据了。这就是Java中基本数据类型的包装类。其对应关系如下:

基本数据类型包装类
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
charCharacter
booleanBoolean

大部分的基本数据类型都是直接首字母大写变成包装类,但是int和char不一样,他们两个的变化是特殊的,需要特殊记忆。

同时,在对基本数据类型进行包装后,变成的对象类型也可以转换成字符串,使用各个类型对应的toString()方法就可以实现该功能。

继承

在Java中我们都是按照类来进行不同功能的开发,但是不同的类之间也会有相同点,那这些相同点再进行一次重新编写会提高代码复杂度,同时代码的复用率也很低,对此,我们就利用了Java的继承关系来对此完善。

还记得生物知识的人都听过这句话,界门纲目科属种,这是对生物进行的划分,其实在Java中,这就是最简单的继承关系,种继承了属的特性,属又继承了科的特性,依次向上推即可。那继承的几个类又什么关系呢?

继承的两个类在Java中被我们称之为父类及其子类,说到这里就能明白了,孩子和父亲的大部分特征都是相同的,这些特征在Java中被称之为属性。除此之外还有一句“老鼠的儿子会打洞”,这是继承了行为,也就是方法。所以继承的本质就是继承了父类中的可以被继承的成员(包括属性和方法)。那哪些是不可继承的呢?

final,private,static和构造方法都是不可继承的,我们一个一个来看

final关键字

final在英语中的意思是最终,也就是到此为止,那么有它修饰的都是不可被继承,甚至不可被更改的成员。在final修饰成员属性的时候,这个时候其实就变成了常量,该属性不再是一个变量了,任何更改都不可被允许。

同样的,如果final修饰了类,那么该类也不可被继承。

private权限修饰符

private修饰符是将属性私有化,那父亲自己私有的东西肯定不能被孩子继承(例如私房钱),那这个时候子类就无法通过继承得到父类的私有化属性了。

static关键字

static的意思是静态,在Java里,static修饰的成员属于整个类,被static修饰的叫做静态属性和静态方法,除此之外剩下的就是非静态了。在这里需要注意静态方法中不能调用非静态方法,最典型的静态方法就是main方法  public static void main(String []args){}  第二个就是static关键字了,所以main方法是属于该类的特有方法。

如果static修饰了成员属性,那么静态成员在加载中是要优先于其他非静态成员的。其赋值有两种方式,一种是在声明的同时进行初始化,另一种就是使用静态代码块来进行赋值,这里重点说第二种,静态代码块如下所示

class Main{
    
    static int i;

    static{
        i = 3;
    }

}

在这里有几个细节的问题,静态代码块的赋值时,要赋值的属性必须要在静态代码块前进行声明,这是因为在静态的加载顺序是默认的从前到后,所以必须要要求顺序。

构造方法

构造方法在继承中无法被子类获取,但是需要再创建子类对象的时候进行使用,这时候就需要使用super关键字来进行一次调用,这个内容也会在不久出一片this和super的总结与对比内容。

多态

多态的基础就是继承,只有先有继承才能有多态。多态的概念是相同的信息在不同地显示出不同的状态。其实说白了就是在继承中进行了方法的重写。所以我们接下来了解什么是重写

方法重写

在子类继承了父类的方法时,发现父类的方法并不适用时就可以进行方法的重写

class Father{
    
 public void demo() {}  

}

class Son extends Father{

    public void demo(){
        System.out.println("重写")
    }

}

这时在子类中调用的demo()方法就能输出"重写"。

多态

有了重写的基础,那我们就能理解多态的实现了,如果这个时候Father类有两个子类都进行了继承和重写,且一个方法重写输出“重写1”,另一个输出“重写2”。那么源自同一个方法的demo方法就会显现出多态,在不同的类中显示出不同的结果,这就是Java的多态

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值